Merge branch 'jc/racy'
authorJunio C Hamano <junkio@cox.net>
Wed, 16 Aug 2006 21:00:34 +0000 (14:00 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 16 Aug 2006 21:00:34 +0000 (14:00 -0700)
* jc/racy:
Remove the "delay writing to avoid runtime penalty of racy-git avoidance"
Add check program "git-check-racy"
Documentation/technical/racy-git.txt
avoid nanosleep(2)

53 files changed:
Makefile
blame.c
builtin-apply.c
builtin-diff.c
builtin-fmt-merge-msg.c
builtin-grep.c
builtin-ls-files.c
builtin-ls-tree.c
builtin-mailinfo.c
builtin-mv.c
builtin-name-rev.c
builtin-pack-objects.c
builtin-prune.c
builtin-push.c
builtin-read-tree.c
builtin-repo-config.c
builtin-rev-list.c
builtin-rev-parse.c
builtin-show-branch.c
builtin-update-index.c
cache.h
combine-diff.c
commit.c
connect.c
daemon.c
describe.c
diff.c
environment.c
exec_cmd.c
fetch-clone.c
fetch-pack.c
fsck-objects.c
git.c
gitweb/gitweb.perl
help.c
http-fetch.c
http-push.c
local-fetch.c
merge-base.c
merge-index.c
mktree.c
pack-redundant.c
read-cache.c
receive-pack.c
run-command.c
send-pack.c
sha1_file.c
sha1_name.c
ssh-fetch.c
ssh-upload.c
t/t7001-mv.sh
unpack-trees.c
upload-pack.c
index 04ed84d09437022c7dde067a23506c2add71f25e..23cd8a017ba05986c309c605ae06fba6a98e5c07 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -126,6 +126,7 @@ GITWEB_CONFIG = gitweb_config.perl
 GITWEB_HOME_LINK_STR = projects
 GITWEB_SITENAME =
 GITWEB_PROJECTROOT = /pub/git
+GITWEB_BASE_URL =
 GITWEB_LIST =
 GITWEB_HOMETEXT = indextext.html
 GITWEB_CSS = gitweb.css
@@ -335,10 +336,12 @@ ifeq ($(uname_S),SunOS)
                NEEDS_LIBICONV = YesPlease
                NO_UNSETENV = YesPlease
                NO_SETENV = YesPlease
+               NO_C99_FORMAT = YesPlease
        endif
        ifeq ($(uname_R),5.9)
                NO_UNSETENV = YesPlease
                NO_SETENV = YesPlease
+               NO_C99_FORMAT = YesPlease
        endif
        INSTALL = ginstall
        TAR = gtar
@@ -624,6 +627,7 @@ gitweb/gitweb.cgi: gitweb/gitweb.perl
            -e 's|++GITWEB_HOME_LINK_STR++|$(GITWEB_HOME_LINK_STR)|g' \
            -e 's|++GITWEB_SITENAME++|$(GITWEB_SITENAME)|g' \
            -e 's|++GITWEB_PROJECTROOT++|$(GITWEB_PROJECTROOT)|g' \
+           -e 's|++GITWEB_BASE_URL++|$(GITWEB_BASE_URL)|g' \
            -e 's|++GITWEB_LIST++|$(GITWEB_LIST)|g' \
            -e 's|++GITWEB_HOMETEXT++|$(GITWEB_HOMETEXT)|g' \
            -e 's|++GITWEB_CSS++|$(GITWEB_CSS)|g' \
diff --git a/blame.c b/blame.c
index 54a43d5c54b86b474444b4440604b0df7ac61116..c253b9ca45cf7d860052ddae95bc1ed34974ffb8 100644 (file)
--- a/blame.c
+++ b/blame.c
@@ -56,9 +56,9 @@ struct patch {
 static void get_blob(struct commit *commit);
 
 /* Only used for statistics */
-static int num_get_patch = 0;
-static int num_commits = 0;
-static int patch_time = 0;
+static int num_get_patch;
+static int num_commits;
+static int patch_time;
 
 struct blame_diff_state {
        struct xdiff_emit_state xm;
index 4573c9abb214c6f7b3119b6e7f594c5ddf09162b..4f0eef0ac3c2d20475b0b50e81f4d51cd4f95396 100644 (file)
@@ -28,18 +28,18 @@ static int prefix_length = -1;
 static int newfd = -1;
 
 static int p_value = 1;
-static int allow_binary_replacement = 0;
-static int check_index = 0;
-static int write_index = 0;
-static int cached = 0;
-static int diffstat = 0;
-static int numstat = 0;
-static int summary = 0;
-static int check = 0;
+static int allow_binary_replacement;
+static int check_index;
+static int write_index;
+static int cached;
+static int diffstat;
+static int numstat;
+static int summary;
+static int check;
 static int apply = 1;
-static int apply_in_reverse = 0;
-static int no_add = 0;
-static int show_index_info = 0;
+static int apply_in_reverse;
+static int no_add;
+static int show_index_info;
 static int line_termination = '\n';
 static unsigned long p_context = -1;
 static const char apply_usage[] =
@@ -51,10 +51,10 @@ static enum whitespace_eol {
        error_on_whitespace,
        strip_whitespace,
 } new_whitespace = warn_on_whitespace;
-static int whitespace_error = 0;
+static int whitespace_error;
 static int squelch_whitespace_errors = 5;
-static int applied_after_stripping = 0;
-static const char *patch_input_file = NULL;
+static int applied_after_stripping;
+static const char *patch_input_file;
 
 static void parse_whitespace_option(const char *option)
 {
@@ -1684,7 +1684,7 @@ static int apply_binary(struct buffer_desc *desc, struct patch *patch)
        }
 
        get_sha1_hex(patch->new_sha1_prefix, sha1);
-       if (!memcmp(sha1, null_sha1, 20)) {
+       if (is_null_sha1(sha1)) {
                free(desc->buffer);
                desc->alloc = desc->size = 0;
                desc->buffer = NULL;
@@ -1916,11 +1916,6 @@ static int check_patch_list(struct patch *patch)
        return error;
 }
 
-static inline int is_null_sha1(const unsigned char *sha1)
-{
-       return !memcmp(sha1, null_sha1, 20);
-}
-
 static void show_index_list(struct patch *list)
 {
        struct patch *patch;
index 82afce782d88a1f773599332910982ef804aea12..40e5c96f30e3d638c09b276805158bdba3ddde58 100644 (file)
@@ -68,8 +68,7 @@ static void stuff_change(struct diff_options *opt,
 {
        struct diff_filespec *one, *two;
 
-       if (memcmp(null_sha1, old_sha1, 20) &&
-           memcmp(null_sha1, new_sha1, 20) &&
+       if (!is_null_sha1(old_sha1) && !is_null_sha1(new_sha1) &&
            !memcmp(old_sha1, new_sha1, 20))
                return;
 
index 485ede7cad65f7fd69e2dbaff6b32b8ad3051c54..28b5dfd054ea8277379d6913b1f1c4cde225e70d 100644 (file)
@@ -8,7 +8,7 @@
 static const char *fmt_merge_msg_usage =
        "git-fmt-merge-msg [--summary] [--no-summary] [--file <file>]";
 
-static int merge_summary = 0;
+static int merge_summary;
 
 static int fmt_merge_msg_config(const char *key, const char *value)
 {
index 3ec99b70108021b266f6470d97efce9acd02b195..0bd517b2649af37d9980f85e784f9a00c3263922 100644 (file)
@@ -175,61 +175,12 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
        }
 }
 
-#if DEBUG
-static inline void indent(int in)
-{
-       int i;
-       for (i = 0; i < in; i++) putchar(' ');
-}
-
-static void dump_pattern_exp(struct grep_expr *x, int in)
-{
-       switch (x->node) {
-       case GREP_NODE_ATOM:
-               indent(in);
-               puts(x->u.atom->pattern);
-               break;
-       case GREP_NODE_NOT:
-               indent(in);
-               puts("--not");
-               dump_pattern_exp(x->u.unary, in+1);
-               break;
-       case GREP_NODE_AND:
-               dump_pattern_exp(x->u.binary.left, in+1);
-               indent(in);
-               puts("--and");
-               dump_pattern_exp(x->u.binary.right, in+1);
-               break;
-       case GREP_NODE_OR:
-               dump_pattern_exp(x->u.binary.left, in+1);
-               indent(in);
-               puts("--or");
-               dump_pattern_exp(x->u.binary.right, in+1);
-               break;
-       }
-}
-
-static void looking_at(const char *msg, struct grep_pat **list)
-{
-       struct grep_pat *p = *list;
-       fprintf(stderr, "%s: looking at ", msg);
-       if (!p)
-               fprintf(stderr, "empty\n");
-       else
-               fprintf(stderr, "<%s>\n", p->pattern);
-}
-#else
-#define looking_at(a,b) do {} while(0)
-#endif
-
 static struct grep_expr *compile_pattern_expr(struct grep_pat **);
 static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
 {
        struct grep_pat *p;
        struct grep_expr *x;
 
-       looking_at("atom", list);
-
        p = *list;
        switch (p->token) {
        case GREP_PATTERN: /* atom */
@@ -257,8 +208,6 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
        struct grep_pat *p;
        struct grep_expr *x;
 
-       looking_at("not", list);
-
        p = *list;
        switch (p->token) {
        case GREP_NOT:
@@ -281,8 +230,6 @@ static struct grep_expr *compile_pattern_and(struct grep_pat **list)
        struct grep_pat *p;
        struct grep_expr *x, *y, *z;
 
-       looking_at("and", list);
-
        x = compile_pattern_not(list);
        p = *list;
        if (p && p->token == GREP_AND) {
@@ -306,8 +253,6 @@ static struct grep_expr *compile_pattern_or(struct grep_pat **list)
        struct grep_pat *p;
        struct grep_expr *x, *y, *z;
 
-       looking_at("or", list);
-
        x = compile_pattern_and(list);
        p = *list;
        if (x && p && p->token != GREP_CLOSE_PAREN) {
@@ -325,8 +270,6 @@ static struct grep_expr *compile_pattern_or(struct grep_pat **list)
 
 static struct grep_expr *compile_pattern_expr(struct grep_pat **list)
 {
-       looking_at("expr", list);
-
        return compile_pattern_or(list);
 }
 
index 11386c432b7722301223b5a85a2cfe847bad5549..ad8c41e7310032c7a868ecb6a87e542af799c361 100644 (file)
 #include "dir.h"
 #include "builtin.h"
 
-static int abbrev = 0;
-static int show_deleted = 0;
-static int show_cached = 0;
-static int show_others = 0;
-static int show_stage = 0;
-static int show_unmerged = 0;
-static int show_modified = 0;
-static int show_killed = 0;
-static int show_valid_bit = 0;
+static int abbrev;
+static int show_deleted;
+static int show_cached;
+static int show_others;
+static int show_stage;
+static int show_unmerged;
+static int show_modified;
+static int show_killed;
+static int show_valid_bit;
 static int line_terminator = '\n';
 
-static int prefix_len = 0, prefix_offset = 0;
-static const char **pathspec = NULL;
-static int error_unmatch = 0;
-static char *ps_matched = NULL;
+static int prefix_len;
+static int prefix_offset;
+static const char **pathspec;
+static int error_unmatch;
+static char *ps_matched;
 
 static const char *tag_cached = "";
 static const char *tag_unmerged = "";
index 261147fdbe76cf9d277bd420cc17efedecc2da2f..201defd9344a25e16066dc7d0a0a8f5707a930cb 100644 (file)
@@ -14,10 +14,10 @@ static int line_termination = '\n';
 #define LS_TREE_ONLY 2
 #define LS_SHOW_TREES 4
 #define LS_NAME_ONLY 8
-static int abbrev = 0;
-static int ls_options = 0;
+static int abbrev;
+static int ls_options;
 static const char **pathspec;
-static int chomp_prefix = 0;
+static int chomp_prefix;
 static const char *ls_tree_prefix;
 
 static const char ls_tree_usage[] =
index 24a4fc63b35ec4c6b5f85bda260811546b12ed46..0c65f9314501bc8c704d326ceeb1ae99bc974b28 100644 (file)
@@ -16,8 +16,8 @@
 
 static FILE *cmitmsg, *patchfile, *fin, *fout;
 
-static int keep_subject = 0;
-static const char *metainfo_charset = NULL;
+static int keep_subject;
+static const char *metainfo_charset;
 static char line[1000];
 static char date[1000];
 static char name[1000];
@@ -31,7 +31,7 @@ static char charset[256];
 
 static char multipart_boundary[1000];
 static int multipart_boundary_len;
-static int patch_lines = 0;
+static int patch_lines;
 
 static char *sanity_check(char *name, char *email)
 {
index a731f8d9cfed783fb59cb64db93f854ef0a4ebf9..c0c8764f7fa71ffe459997f03b5158cd7c72209b 100644 (file)
@@ -17,12 +17,19 @@ static const char builtin_mv_usage[] =
 static const char **copy_pathspec(const char *prefix, const char **pathspec,
                                  int count, int base_name)
 {
+       int i;
        const char **result = xmalloc((count + 1) * sizeof(const char *));
        memcpy(result, pathspec, count * sizeof(const char *));
        result[count] = NULL;
-       if (base_name) {
-               int i;
-               for (i = 0; i < count; i++) {
+       for (i = 0; i < count; i++) {
+               int length = strlen(result[i]);
+               if (length > 0 && result[i][length - 1] == '/') {
+                       char *without_slash = xmalloc(length);
+                       memcpy(without_slash, result[i], length - 1);
+                       without_slash[length] = '\0';
+                       result[i] = without_slash;
+               }
+               if (base_name) {
                        const char *last_slash = strrchr(result[i], '/');
                        if (last_slash)
                                result[i] = last_slash + 1;
@@ -119,6 +126,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 
        /* Checking */
        for (i = 0; i < count; i++) {
+               int length;
                const char *bad = NULL;
 
                if (show_only)
@@ -128,6 +136,12 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                if (lstat(source[i], &st) < 0)
                        bad = "bad source";
 
+               if (!bad &&
+                   (length = strlen(source[i])) >= 0 &&
+                   !strncmp(destination[i], source[i], length) &&
+                   (destination[i][length] == 0 || destination[i][length] == '/'))
+                       bad = "can not move directory into itself";
+
                if (S_ISDIR(st.st_mode)) {
                        const char *dir = source[i], *dest_dir = destination[i];
                        int first, last, len = strlen(dir);
@@ -203,10 +217,6 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                        }
                }
 
-               if (!bad &&
-                   !strncmp(destination[i], source[i], strlen(source[i])))
-                       bad = "can not move directory into itself";
-
                if (!bad && cache_name_pos(source[i], strlen(source[i])) < 0)
                        bad = "not under version control";
 
index 571bba4817bfdd0e79a93780784eda940545a90f..d44e782c999eeaf59ec661047eb95544a29dc072 100644 (file)
@@ -75,7 +75,7 @@ static void name_rev(struct commit *commit,
        }
 }
 
-static int tags_only = 0;
+static int tags_only;
 
 static int name_ref(const char *path, const unsigned char *sha1)
 {
index 2f9921224dfe663ebaf1f4bab2bd24df1c660999..448461bc4826da8b34ebf32c876d9b2341f51447 100644 (file)
@@ -53,17 +53,17 @@ struct object_entry {
  */
 
 static unsigned char object_list_sha1[20];
-static int non_empty = 0;
-static int no_reuse_delta = 0;
-static int local = 0;
-static int incremental = 0;
+static int non_empty;
+static int no_reuse_delta;
+static int local;
+static int incremental;
 static struct object_entry **sorted_by_sha, **sorted_by_type;
-static struct object_entry *objects = NULL;
-static int nr_objects = 0, nr_alloc = 0, nr_result = 0;
+static struct object_entry *objects;
+static int nr_objects, nr_alloc, nr_result;
 static const char *base_name;
 static unsigned char pack_file_sha1[20];
 static int progress = 1;
-static volatile sig_atomic_t progress_update = 0;
+static volatile sig_atomic_t progress_update;
 static int window = 10;
 
 /*
@@ -72,8 +72,8 @@ static int window = 10;
  * sorted_by_sha is also possible but this was easier to code and faster.
  * This hashtable is built after all the objects are seen.
  */
-static int *object_ix = NULL;
-static int object_ix_hashsz = 0;
+static int *object_ix;
+static int object_ix_hashsz;
 
 /*
  * Pack index for existing packs give us easy access to the offsets into
@@ -90,15 +90,15 @@ struct pack_revindex {
        struct packed_git *p;
        unsigned long *revindex;
 } *pack_revindex = NULL;
-static int pack_revindex_hashsz = 0;
+static int pack_revindex_hashsz;
 
 /*
  * stats
  */
-static int written = 0;
-static int written_delta = 0;
-static int reused = 0;
-static int reused_delta = 0;
+static int written;
+static int written_delta;
+static int reused;
+static int reused_delta;
 
 static int pack_revindex_ix(struct packed_git *p)
 {
index 89ec7f1426d3f5d02486e3148b0c568edbe15300..fc885ce55bbb3a44367b8cec1ea66b1918c78f15 100644 (file)
@@ -11,7 +11,7 @@
 #include "cache-tree.h"
 
 static const char prune_usage[] = "git-prune [-n]";
-static int show_only = 0;
+static int show_only;
 static struct rev_info revs;
 
 static int prune_object(char *path, const char *filename, const unsigned char *sha1)
index c09ff2f65e7cf1dbcee2221b7977e51f2a3bb675..2b5e6fa9ed18c20cda264dbaf9df9d3cbac93c0e 100644 (file)
 
 static const char push_usage[] = "git-push [--all] [--tags] [-f | --force] <repository> [<refspec>...]";
 
-static int all = 0, tags = 0, force = 0, thin = 1;
-static const char *execute = NULL;
+static int all, tags, force, thin = 1;
+static const char *execute;
 
 #define BUF_SIZE (2084)
 static char buffer[BUF_SIZE];
 
-static const char **refspec = NULL;
-static int refspec_nr = 0;
+static const char **refspec;
+static int refspec_nr;
 
 static void add_refspec(const char *ref)
 {
index 8da8acbb0a25f88073254e21936a6ad5c6d0cca4..53087faf7a63e6268ffff5239142a00c120dcf8f 100644 (file)
@@ -12,7 +12,7 @@
 #include "unpack-trees.h"
 #include "builtin.h"
 
-static struct object_list *trees = NULL;
+static struct object_list *trees;
 
 static int list_tree(unsigned char *sha1)
 {
index c821e22717e35795b74f1c26d16f6c7da63ebdf8..c4164802081e03c8061f77498e08dd2ca8501af7 100644 (file)
@@ -5,14 +5,14 @@
 static const char git_config_set_usage[] =
 "git-repo-config [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --unset | --unset-all] name [value [value_regex]] | --list";
 
-static char* key = NULL;
-static regex_t* key_regexp = NULL;
-static regex_t* regexp = NULL;
-static int show_keys = 0;
-static int use_key_regexp = 0;
-static int do_all = 0;
-static int do_not_match = 0;
-static int seen = 0;
+static char *key;
+static regex_t *key_regexp;
+static regex_t *regexp;
+static int show_keys;
+static int use_key_regexp;
+static int do_all;
+static int do_not_match;
+static int seen;
 static enum { T_RAW, T_INT, T_BOOL } type = T_RAW;
 
 static int show_all_config(const char *key_, const char *value_)
index 0dee1734a31308ace74b0b25cc87ffcf4993549b..bc48a3e23081264d06f2659181a19b31694dd993 100644 (file)
@@ -39,9 +39,9 @@ static const char rev_list_usage[] =
 
 static struct rev_info revs;
 
-static int bisect_list = 0;
-static int show_timestamp = 0;
-static int hdr_termination = 0;
+static int bisect_list;
+static int show_timestamp;
+static int hdr_termination;
 static const char *header_prefix;
 
 static void show_commit(struct commit *commit)
index aca4a3603283a257f7621934103c85d5c0c31390..fd3ccc8546455f60f56ceb59dbe98fb367a86d2a 100644 (file)
 #define DO_NONFLAGS    8
 static int filter = ~0;
 
-static const char *def = NULL;
+static const char *def;
 
 #define NORMAL 0
 #define REVERSED 1
 static int show_type = NORMAL;
-static int symbolic = 0;
-static int abbrev = 0;
-static int output_sq = 0;
+static int symbolic;
+static int abbrev;
+static int output_sq;
 
-static int revs_count = 0;
+static int revs_count;
 
 /*
  * Some arguments are relevant "revision" arguments,
index 2a1b848f6c169f09cb168d12e6bb5033795b8be2..95fbf77fad84a13330b0c0e58586edac0eb037f0 100644 (file)
@@ -8,9 +8,9 @@
 static const char show_branch_usage[] =
 "git-show-branch [--sparse] [--current] [--all] [--heads] [--tags] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [<refs>...]";
 
-static int default_num = 0;
-static int default_alloc = 0;
-static const char **default_arg = NULL;
+static int default_num;
+static int default_alloc;
+static const char **default_arg;
 
 #define UNINTERESTING  01
 
index d2556f376b293d2907cd8416e99f9c0bd31781ca..9f0cf28ba2dde7c5000029107460a3f4ca873aa3 100644 (file)
@@ -23,7 +23,7 @@ static int allow_replace;
 static int info_only;
 static int force_remove;
 static int verbose;
-static int mark_valid_only = 0;
+static int mark_valid_only;
 #define MARK_VALID 1
 #define UNMARK_VALID 2
 
diff --git a/cache.h b/cache.h
index af7740258d8d1bf5e44d2233c1fe1c35aa62ec77..c7382996f62061f1022262fcc6e6f3f15e946d0a 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -210,6 +210,10 @@ extern char *sha1_pack_name(const unsigned char *sha1);
 extern char *sha1_pack_index_name(const unsigned char *sha1);
 extern const char *find_unique_abbrev(const unsigned char *sha1, int);
 extern const unsigned char null_sha1[20];
+static inline int is_null_sha1(const unsigned char *sha1)
+{
+       return !memcmp(sha1, null_sha1, 20);
+}
 
 int git_mkstemp(char *path, size_t n, const char *template);
 
index 4c6bfed56ee0fe3c84124e0b9a9c5bb80c9abcf2..ce063b4ffa48eb1db8849d5aabb6732fc98946b6 100644 (file)
@@ -94,7 +94,7 @@ static char *grab_blob(const unsigned char *sha1, unsigned long *size)
 {
        char *blob;
        char type[20];
-       if (!memcmp(sha1, null_sha1, 20)) {
+       if (is_null_sha1(sha1)) {
                /* deleted blob */
                *size = 0;
                return xcalloc(1, 1);
@@ -611,7 +611,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
        struct sline *sline; /* survived lines */
        int mode_differs = 0;
        int i, show_hunks;
-       int working_tree_file = !memcmp(elem->sha1, null_sha1, 20);
+       int working_tree_file = is_null_sha1(elem->sha1);
        int abbrev = opt->full_index ? 40 : DEFAULT_ABBREV;
        mmfile_t result_file;
 
index 77f0ca175c66b0ef0b7ac5b24672b106c6f17178..972d1b70c02d0a21bbb187ef964e6604d4556e87 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -727,10 +727,10 @@ struct commit *pop_commit(struct commit_list **stack)
 
 int count_parents(struct commit * commit)
 {
-        int count = 0;
+        int count;
         struct commit_list * parents = commit->parents;
-        for (count=0;parents; parents=parents->next,count++)
-          ;
+        for (count = 0; parents; parents = parents->next,count++)
+               ;
         return count;
 }
 
index 4422a0d8d38c225c6c4716ce8ff826bc1acbd981..7a6a73f2a333d067c5a5442004f76ebbb9aaed17 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -10,7 +10,7 @@
 #include <netdb.h>
 #include <signal.h>
 
-static char *server_capabilities = NULL;
+static char *server_capabilities;
 
 static int check_ref(const char *name, int len, unsigned int flags)
 {
@@ -493,8 +493,8 @@ static void git_tcp_connect(int fd[2], char *host)
 }
 
 
-static char *git_proxy_command = NULL;
-static const char *rhost_name = NULL;
+static char *git_proxy_command;
+static const char *rhost_name;
 static int rhost_len;
 
 static int git_proxy_command_options(const char *var, const char *value)
@@ -737,14 +737,9 @@ int git_connect(int fd[2], char *url, const char *prog)
 
 int finish_connect(pid_t pid)
 {
-       int ret;
-
-       for (;;) {
-               ret = waitpid(pid, NULL, 0);
-               if (!ret)
-                       break;
+       while (waitpid(pid, NULL, 0) < 0) {
                if (errno != EINTR)
-                       break;
+                       return -1;
        }
-       return ret;
+       return 0;
 }
index 810837f0c4b8296ce762441c80527efdb6c9c3b6..012936f3bd76d9f9648ba9498b4126c7d6861e5c 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -22,24 +22,24 @@ static const char daemon_usage[] =
 "           [--reuseaddr] [--detach] [--pid-file=file] [directory...]";
 
 /* List of acceptable pathname prefixes */
-static char **ok_paths = NULL;
-static int strict_paths = 0;
+static char **ok_paths;
+static int strict_paths;
 
 /* If this is set, git-daemon-export-ok is not required */
-static int export_all_trees = 0;
+static int export_all_trees;
 
 /* Take all paths relative to this one if non-NULL */
-static char *base_path = NULL;
+static char *base_path;
 
 /* If defined, ~user notation is allowed and the string is inserted
  * after ~user/.  E.g. a request to git://host/~alice/frotz would
  * go to /home/alice/pub_git/frotz with --user-path=pub_git.
  */
-static const char *user_path = NULL;
+static const char *user_path;
 
 /* Timeout, and initial timeout */
-static unsigned int timeout = 0;
-static unsigned int init_timeout = 0;
+static unsigned int timeout;
+static unsigned int init_timeout;
 
 static void logreport(int priority, const char *err, va_list params)
 {
@@ -333,12 +333,12 @@ static int execute(struct sockaddr *addr)
 static int max_connections = 25;
 
 /* These are updated by the signal handler */
-static volatile unsigned int children_reaped = 0;
+static volatile unsigned int children_reaped;
 static pid_t dead_child[MAX_CHILDREN];
 
 /* These are updated by the main loop */
-static unsigned int children_spawned = 0;
-static unsigned int children_deleted = 0;
+static unsigned int children_spawned;
+static unsigned int children_deleted;
 
 static struct child {
        pid_t pid;
index 324ca8965b9512de59b515cdcc29801022553d1d..2b9301fc1205795e30dfd7a7493cb03cdebdb437 100644 (file)
@@ -8,12 +8,12 @@
 static const char describe_usage[] =
 "git-describe [--all] [--tags] [--abbrev=<n>] <committish>*";
 
-static int all = 0;    /* Default to annotated tags only */
-static int tags = 0;   /* But allow any tags if --tags is specified */
+static int all;        /* Default to annotated tags only */
+static int tags;       /* But allow any tags if --tags is specified */
 
 static int abbrev = DEFAULT_ABBREV;
 
-static int names = 0, allocs = 0;
+static int names, allocs;
 static struct commit_name {
        const struct commit *commit;
        int prio; /* annotated tag = 2, tag = 1, head = 0 */
diff --git a/diff.c b/diff.c
index 2327e6065b548ffb89136bda8b054e7b61d47c46..7a238d023336d4340efd67534dae4ed23dd5d3c0 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -13,9 +13,9 @@
 
 static int use_size_cache;
 
-static int diff_detect_rename_default = 0;
+static int diff_detect_rename_default;
 static int diff_rename_limit_default = -1;
-static int diff_use_color_default = 0;
+static int diff_use_color_default;
 
 /* "\033[1;38;5;2xx;48;5;2xxm\0" is 23 bytes */
 static char diff_colors[][24] = {
@@ -1102,7 +1102,7 @@ void fill_filespec(struct diff_filespec *spec, const unsigned char *sha1,
        if (mode) {
                spec->mode = canon_mode(mode);
                memcpy(spec->sha1, sha1, 20);
-               spec->sha1_valid = !!memcmp(sha1, null_sha1, 20);
+               spec->sha1_valid = !is_null_sha1(sha1);
        }
 }
 
index 87162b257254434be356b1a579967d51adff1e5f..e6bd0033b4666f52dc756b6e2b0d5a1745b0c6b9 100644 (file)
@@ -13,14 +13,14 @@ char git_default_email[MAX_GITNAME];
 char git_default_name[MAX_GITNAME];
 int use_legacy_headers = 1;
 int trust_executable_bit = 1;
-int assume_unchanged = 0;
-int prefer_symlink_refs = 0;
-int log_all_ref_updates = 0;
+int assume_unchanged;
+int prefer_symlink_refs;
+int log_all_ref_updates;
 int warn_ambiguous_refs = 1;
-int repository_format_version = 0;
+int repository_format_version;
 char git_commit_encoding[MAX_ENCODING_LENGTH] = "utf-8";
 int shared_repository = PERM_UMASK;
-const char *apply_default_whitespace = NULL;
+const char *apply_default_whitespace;
 int zlib_compression_level = Z_DEFAULT_COMPRESSION;
 int pager_in_use;
 int pager_use_color = 1;
index 62f51fcd6e367d2dc7e3dc8d967ee05fd1648d04..e30936d72cd48822b43ec7568d5fcafc76a7659e 100644 (file)
@@ -5,7 +5,7 @@
 
 extern char **environ;
 static const char *builtin_exec_path = GIT_EXEC_PATH;
-static const char *current_exec_path = NULL;
+static const char *current_exec_path;
 
 void git_set_exec_path(const char *exec_path)
 {
index 5e84c4620ff96f5c7ab93e5f3bfd10609edd5fd5..c5cf4776fabb8f9f09028dd1f0cfaf1d55e1397c 100644 (file)
@@ -44,9 +44,8 @@ static int finish_pack(const char *pack_tmp_name, const char *me)
 
        for (;;) {
                int status, code;
-               int retval = waitpid(pid, &status, 0);
 
-               if (retval < 0) {
+               if (waitpid(pid, &status, 0) < 0) {
                        if (errno == EINTR)
                                continue;
                        error("waitpid failed (%s)", strerror(errno));
index b7824dbed4e10d912a0977865e24e21ff9295aae..e18c1489a1ab8620cade351ec502828b10a41ac4 100644 (file)
@@ -24,8 +24,8 @@ static const char *exec = "git-upload-pack";
  */
 #define MAX_IN_VAIN 256
 
-static struct commit_list *rev_list = NULL;
-static int non_common_revs = 0, multi_ack = 0, use_thin_pack = 0, use_sideband;
+static struct commit_list *rev_list;
+static int non_common_revs, multi_ack, use_thin_pack, use_sideband;
 
 static void rev_list_push(struct commit *commit, int mark)
 {
@@ -250,7 +250,7 @@ static int find_common(int fd[2], unsigned char *result_sha1,
        return retval;
 }
 
-static struct commit_list *complete = NULL;
+static struct commit_list *complete;
 
 static int mark_complete(const char *path, const unsigned char *sha1)
 {
index 4ba3377aeffa4b0c7868943d688c9a8ed2f5ed08..31e00d84b30f95c713b3dc6a654b4ef8459c6729 100644 (file)
 #define REACHABLE 0x0001
 #define SEEN      0x0002
 
-static int show_root = 0;
-static int show_tags = 0;
-static int show_unreachable = 0;
-static int check_full = 0;
-static int check_strict = 0;
-static int keep_cache_objects = 0;
+static int show_root;
+static int show_tags;
+static int show_unreachable;
+static int check_full;
+static int check_strict;
+static int keep_cache_objects;
 static unsigned char head_sha1[20];
 
 #ifdef NO_D_INO_IN_DIRENT
@@ -400,7 +400,7 @@ static void fsck_dir(int i, char *path)
        closedir(dir);
 }
 
-static int default_refs = 0;
+static int default_refs;
 
 static int fsck_handle_ref(const char *refname, const unsigned char *sha1)
 {
@@ -452,7 +452,7 @@ static int fsck_head_link(void)
        if (strncmp(git_refs_heads_master + pfxlen, "refs/heads/", 11))
                return error("HEAD points to something strange (%s)",
                             git_refs_heads_master + pfxlen);
-       if (!memcmp(null_sha1, sha1, 20))
+       if (is_null_sha1(sha1))
                return error("HEAD: not a valid git pointer");
        return 0;
 }
diff --git a/git.c b/git.c
index 5da7787d867365b5a018fd3806fc5d0bfd9b92a2..930998bbe542cbaa92b3f16a6b0dc0d6ad43b874 100644 (file)
--- a/git.c
+++ b/git.c
@@ -92,7 +92,7 @@ static int handle_options(const char*** argv, int* argc)
 }
 
 static const char *alias_command;
-static char *alias_string = NULL;
+static char *alias_string;
 
 static int git_alias_config(const char *var, const char *value)
 {
index b5b89de91bc13a4a96b97b72437de126b5bc7274..7c92ac30ce2fcabc46455d7f7b1dc44829705335 100755 (executable)
 # source of projects list
 our $projects_list = "++GITWEB_LIST++";
 
+# list of git base URLs used for URL to where fetch project from,
+# i.e. full URL is "$git_base_url/$project"
+our @git_base_url_list = ("++GITWEB_BASE_URL++");
+
 # default blob_plain mimetype and default charset for text/plain blob
 our $default_blob_plain_mimetype = 'text/plain';
 our $default_text_plain_charset  = undef;
 $actions{$action}->();
 exit;
 
+## ======================================================================
+## action links
+
+sub href(%) {
+       my %mapping = (
+               action => "a",
+               project => "p",
+               file_name => "f",
+               hash => "h",
+               hash_parent => "hp",
+               hash_base => "hb",
+               page => "pg",
+               searchtext => "s",
+       );
+
+       my %params = @_;
+       $params{"project"} ||= $project;
+
+       my $href = "$my_uri?";
+       $href .= esc_param( join(";",
+               map { "$mapping{$_}=$params{$_}" } keys %params
+       ) );
+
+       return $href;
+}
+
+
 ## ======================================================================
 ## validation, quoting/unquoting and escaping
 
@@ -357,7 +388,7 @@ sub format_log_line_html {
        if ($line =~ m/([0-9a-fA-F]{40})/) {
                my $hash_text = $1;
                if (git_get_type($hash_text) eq "commit") {
-                       my $link = $cgi->a({-class => "text", -href => "$my_uri?" . esc_param("p=$project;a=commit;h=$hash_text")}, $hash_text);
+                       my $link = $cgi->a({-class => "text", -href => href(action=>"commit", hash=>$hash_text)}, $hash_text);
                        $line =~ s/$hash_text/$link/;
                }
        }
@@ -394,16 +425,15 @@ sub format_ref_marker {
 
 # format, perhaps shortened and with markers, title line
 sub format_subject_html {
-       my ($long, $short, $query, $extra) = @_;
+       my ($long, $short, $href, $extra) = @_;
        $extra = '' unless defined($extra);
 
        if (length($short) < length($long)) {
-               return $cgi->a({-href => "$my_uri?" . esc_param($query),
-                              -class => "list", -title => $long},
+               return $cgi->a({-href => $href, -class => "list",
+                               -title => $long},
                       esc_html($short) . $extra);
        } else {
-               return $cgi->a({-href => "$my_uri?" . esc_param($query),
-                              -class => "list"},
+               return $cgi->a({-href => $href, -class => "list"},
                       esc_html($long)  . $extra);
        }
 }
@@ -503,6 +533,16 @@ sub git_get_project_description {
        return $descr;
 }
 
+sub git_get_project_url_list {
+       my $path = shift;
+
+       open my $fd, "$projectroot/$path/cloneurl" or return undef;
+       my @git_project_url_list = map { chomp; $_ } <$fd>;
+       close $fd;
+
+       return wantarray ? @git_project_url_list : \@git_project_url_list;
+}
+
 sub git_get_projects_list {
        my @list;
 
@@ -967,8 +1007,7 @@ sub git_header_html {
        if (defined $project) {
                printf('<link rel="alternate" title="%s log" '.
                       'href="%s" type="application/rss+xml"/>'."\n",
-                      esc_param($project),
-                      esc_param("$my_uri?p=$project;a=rss"));
+                      esc_param($project), href(action=>"rss"));
        }
 
        print "</head>\n" .
@@ -979,7 +1018,7 @@ sub git_header_html {
              "</a>\n";
        print $cgi->a({-href => esc_param($home_link)}, $home_link_str) . " / ";
        if (defined $project) {
-               print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=summary")}, esc_html($project));
+               print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
                if (defined $action) {
                        print " / $action";
                }
@@ -1016,7 +1055,7 @@ sub git_footer_html {
                if (defined $descr) {
                        print "<div class=\"page_footer_text\">" . esc_html($descr) . "</div>\n";
                }
-               print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=rss"), -class => "rss_logo"}, "RSS") . "\n";
+               print $cgi->a({-href => href(action=>"rss"), -class => "rss_logo"}, "RSS") . "\n";
        } else {
                print $cgi->a({-href => "$my_uri?" . esc_param("a=opml"), -class => "rss_logo"}, "OPML") . "\n";
        }
@@ -1051,27 +1090,25 @@ sub git_print_page_nav {
                @navs = grep { $_ ne $suppress } @navs;
        }
 
-       my %arg = map { $_, ''} @navs;
+       my %arg = map { $_ => {action=>$_} } @navs;
        if (defined $head) {
                for (qw(commit commitdiff)) {
-                       $arg{$_} = ";h=$head";
+                       $arg{$_}{hash} = $head;
                }
                if ($current =~ m/^(tree | log | shortlog | commit | commitdiff | search)$/x) {
                        for (qw(shortlog log)) {
-                               $arg{$_} = ";h=$head";
+                               $arg{$_}{hash} = $head;
                        }
                }
        }
-       $arg{tree} .= ";h=$treehead" if defined $treehead;
-       $arg{tree} .= ";hb=$treebase" if defined $treebase;
+       $arg{tree}{hash} = $treehead if defined $treehead;
+       $arg{tree}{hash_base} = $treebase if defined $treebase;
 
        print "<div class=\"page_nav\">\n" .
                (join " | ",
-                map { $_ eq $current
-                                        ? $_
-                                        : $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$_$arg{$_}")}, "$_")
-                                }
-                @navs);
+                map { $_ eq $current ?
+                      $_ : $cgi->a({-href => href(%{$arg{$_}})}, "$_")
+                } @navs);
        print "<br/>\n$extra<br/>\n" .
              "</div>\n";
 }
@@ -1082,14 +1119,14 @@ sub format_paging_nav {
 
 
        if ($hash ne $head || $page) {
-               $paging_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$action")}, "HEAD");
+               $paging_nav .= $cgi->a({-href => href(action=>$action)}, "HEAD");
        } else {
                $paging_nav .= "HEAD";
        }
 
        if ($page > 0) {
                $paging_nav .= " &sdot; " .
-                       $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$action;h=$hash;pg=" . ($page-1)),
+                       $cgi->a({-href => href(action=>$action, hash=>$hash, page=>$page-1),
                                 -accesskey => "p", -title => "Alt-p"}, "prev");
        } else {
                $paging_nav .= " &sdot; prev";
@@ -1097,7 +1134,7 @@ sub format_paging_nav {
 
        if ($nrevs >= (100 * ($page+1)-1)) {
                $paging_nav .= " &sdot; " .
-                       $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$action;h=$hash;pg=" . ($page+1)),
+                       $cgi->a({-href => href(action=>$action, hash=>$hash, page=>$page+1),
                                 -accesskey => "n", -title => "Alt-n"}, "next");
        } else {
                $paging_nav .= " &sdot; next";
@@ -1111,15 +1148,16 @@ sub format_paging_nav {
 
 sub git_print_header_div {
        my ($action, $title, $hash, $hash_base) = @_;
-       my $rest = '';
+       my %args = ();
 
-       $rest .= ";h=$hash" if $hash;
-       $rest .= ";hb=$hash_base" if $hash_base;
+       $args{action} = $action;
+       $args{hash} = $hash if $hash;
+       $args{hash_base} = $hash_base if $hash_base;
 
        print "<div class=\"header\">\n" .
-             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$action$rest"),
-                      -class => "title"}, $title ? $title : $action) . "\n" .
-             "</div>\n";
+             $cgi->a({-href => href(%args), -class => "title"},
+             $title ? $title : $action) .
+             "\n</div>\n";
 }
 
 sub git_print_page_path {
@@ -1130,7 +1168,7 @@ sub git_print_page_path {
                print "<div class=\"page_path\"><b>/</b></div>\n";
        } elsif (defined $type && $type eq 'blob') {
                print "<div class=\"page_path\"><b>" .
-                       $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;f=$file_name")}, esc_html($name)) . "</b><br/></div>\n";
+                       $cgi->a({-href => href(action=>"blob_plain", file_name=>$file_name)}, esc_html($name)) . "</b><br/></div>\n";
        } else {
                print "<div class=\"page_path\"><b>" . esc_html($name) . "</b><br/></div>\n";
        }
@@ -1177,22 +1215,22 @@ sub git_difftree_body {
                                $mode_chng = sprintf(" with mode: %04o", (oct $to_mode) & 0777);
                        }
                        print "<td>" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$file"),
+                             $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$file),
                                      -class => "list"}, esc_html($file)) .
                              "</td>\n" .
                              "<td><span class=\"file_status new\">[new " . file_type($to_mode) . "$mode_chng]</span></td>\n" .
                              "<td class=\"link\">" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$file")}, "blob") .
+                             $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$file)}, "blob") .
                              "</td>\n";
 
                } elsif ($status eq "D") { # deleted
                        print "<td>" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$from_id;hb=$parent;f=$file"),
+                             $cgi->a({-href => href(action=>"blob", hash=>$from_id, hash_base=>$parent, file_name=>$file),
                                       -class => "list"}, esc_html($file)) . "</td>\n" .
                              "<td><span class=\"file_status deleted\">[deleted " . file_type($from_mode). "]</span></td>\n" .
                              "<td class=\"link\">" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$from_id;hb=$parent;f=$file")}, "blob") . " | " .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=history;hb=$parent;f=$file")}, "history") .
+                             $cgi->a({-href => href(action=>"blob", hash=>$from_id, hash_base=>$parent, file_name=>$file)}, "blob") . " | " .
+                             $cgi->a({-href => href(action=>"history", hash_base=>$parent, file_name=>$file)}, "history") .
                              "</td>\n"
 
                } elsif ($status eq "M" || $status eq "T") { # modified, or type changed
@@ -1213,20 +1251,20 @@ sub git_difftree_body {
                        }
                        print "<td>";
                        if ($to_id ne $from_id) { # modified
-                               print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blobdiff;h=$to_id;hp=$from_id;hb=$hash;f=$file"),
+                               print $cgi->a({-href => href(action=>"blobdiff", hash=>$to_id, hash_parent=>$from_id, hash_base=>$hash, file_name=>$file),
                                              -class => "list"}, esc_html($file));
                        } else { # mode changed
-                               print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$file"),
+                               print $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$file),
                                              -class => "list"}, esc_html($file));
                        }
                        print "</td>\n" .
                              "<td>$mode_chnge</td>\n" .
                              "<td class=\"link\">" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$file")}, "blob");
+                               $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$file)}, "blob");
                        if ($to_id ne $from_id) { # modified
-                               print " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blobdiff;h=$to_id;hp=$from_id;hb=$hash;f=$file")}, "diff");
+                               print $cgi->a({-href => href(action=>"blobdiff", hash=>$to_id, hash_parent=>$from_id, hash_base=>$hash, file_name=>$file)}, "diff");
                        }
-                       print " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=history;hb=$hash;f=$file")}, "history") . "\n";
+                       print " | " . $cgi->a({-href => href(action=>"history", hash_base=>$hash, file_name=>$file)}, "history") . "\n";
                        print "</td>\n";
 
                } elsif ($status eq "R") { # renamed
@@ -1236,14 +1274,14 @@ sub git_difftree_body {
                                $mode_chng = sprintf(", mode: %04o", (oct $to_mode) & 0777);
                        }
                        print "<td>" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$to_file"),
+                             $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$to_file),
                                      -class => "list"}, esc_html($to_file)) . "</td>\n" .
                              "<td><span class=\"file_status moved\">[moved from " .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$from_id;hb=$parent;f=$from_file"),
+                             $cgi->a({-href => href(action=>"blob", hash=>$from_id, hash_base=>$parent, file_name=>$from_file),
                                      -class => "list"}, esc_html($from_file)) .
                              " with " . (int $similarity) . "% similarity$mode_chng]</span></td>\n" .
                              "<td class=\"link\">" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$to_file")}, "blob");
+                             $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$to_file)}, "blob");
                        if ($to_id ne $from_id) {
                                print " | " .
                                      $cgi->a({-href => "$my_uri?" .
@@ -1258,14 +1296,14 @@ sub git_difftree_body {
                                $mode_chng = sprintf(", mode: %04o", (oct $to_mode) & 0777);
                        }
                        print "<td>" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$to_file"),
+                             $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$to_file),
                                      -class => "list"}, esc_html($to_file)) . "</td>\n" .
                              "<td><span class=\"file_status copied\">[copied from " .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$from_id;hb=$parent;f=$from_file"),
+                             $cgi->a({-href => href(action=>"blob", hash=>$from_id, hash_base=>$parent, file_name=>$from_file),
                                      -class => "list"}, esc_html($from_file)) .
                              " with " . (int $similarity) . "% similarity$mode_chng]</span></td>\n" .
                              "<td class=\"link\">" .
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$to_id;hb=$hash;f=$to_file")}, "blob");
+                             $cgi->a({-href => href(action=>"blob", hash=>$to_id, hash_base=>$hash, file_name=>$to_file)}, "blob");
                        if ($to_id ne $from_id) {
                                print " | " .
                                      $cgi->a({-href => "$my_uri?" .
@@ -1301,11 +1339,11 @@ sub git_shortlog_body {
                print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
                      "<td><i>" . esc_html(chop_str($co{'author_name'}, 10)) . "</i></td>\n" .
                      "<td>";
-               print format_subject_html($co{'title'}, $co{'title_short'}, "p=$project;a=commit;h=$commit", $ref);
+               print format_subject_html($co{'title'}, $co{'title_short'}, href(action=>"commit", hash=>$commit), $ref);
                print "</td>\n" .
                      "<td class=\"link\">" .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$commit")}, "commit") . " | " .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff;h=$commit")}, "commitdiff") .
+                     $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " .
+                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") .
                      "</td>\n" .
                      "</tr>\n";
        }
@@ -1347,12 +1385,12 @@ sub git_history_body {
                      "<td><i>" . esc_html(chop_str($co{'author_name'}, 15, 3)) . "</i></td>\n" .
                      "<td>";
                # originally git_history used chop_str($co{'title'}, 50)
-               print format_subject_html($co{'title'}, $co{'title_short'}, "p=$project;a=commit;h=$commit", $ref);
+               print format_subject_html($co{'title'}, $co{'title_short'}, href(action=>"commit", hash=>$commit), $ref);
                print "</td>\n" .
                      "<td class=\"link\">" .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$commit")}, "commit") . " | " .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff;h=$commit")}, "commitdiff") . " | " .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$ftype;hb=$commit;f=$file_name")}, $ftype);
+                     $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " .
+                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") . " | " .
+                     $cgi->a({-href => href(action=>$ftype, hash_base=>$commit, file_name=>$file_name)}, $ftype);
 
                if ($ftype eq 'blob') {
                        my $blob_current = git_get_hash_by_path($hash_base, $file_name);
@@ -1360,7 +1398,7 @@ sub git_history_body {
                        if (defined $blob_current && defined $blob_parent &&
                                        $blob_current ne $blob_parent) {
                                print " | " .
-                                       $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blobdiff;h=$blob_current;hp=$blob_parent;hb=$commit;f=$file_name")},
+                                       $cgi->a({-href => href(action=>"blobdiff", hash=>$blob_current, hash_parent=>$blob_parent, hash_base=>$commit, file_name=>$file_name)},
                                                "diff to current");
                        }
                }
@@ -1400,28 +1438,28 @@ sub git_tags_body {
                $alternate ^= 1;
                print "<td><i>$tag{'age'}</i></td>\n" .
                      "<td>" .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$tag{'reftype'};h=$tag{'refid'}"),
+                     $cgi->a({-href => href(action=>$tag{'reftype'}, hash=>$tag{'refid'}),
                               -class => "list"}, "<b>" . esc_html($tag{'name'}) . "</b>") .
                      "</td>\n" .
                      "<td>";
                if (defined $comment) {
-                       print format_subject_html($comment, $comment_short, "p=$project;a=tag;h=$tag{'id'}");
+                       print format_subject_html($comment, $comment_short, href(action=>"tag", hash=>$tag{'id'}));
                }
                print "</td>\n" .
                      "<td class=\"selflink\">";
                if ($tag{'type'} eq "tag") {
-                       print $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tag;h=$tag{'id'}")}, "tag");
+                       print $cgi->a({-href => href(action=>"tag", hash=>$tag{'id'})}, "tag");
                } else {
                        print "&nbsp;";
                }
                print "</td>\n" .
                      "<td class=\"link\">" . " | " .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$tag{'reftype'};h=$tag{'refid'}")}, $tag{'reftype'});
+                     $cgi->a({-href => href(action=>$tag{'reftype'}, hash=>$tag{'refid'})}, $tag{'reftype'});
                if ($tag{'reftype'} eq "commit") {
-                       print " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog;h=$tag{'name'}")}, "shortlog") .
-                             " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=log;h=$tag{'refid'}")}, "log");
+                       print " | " . $cgi->a({-href => href(action=>"shortlog", hash=>$tag{'name'})}, "shortlog") .
+                             " | " . $cgi->a({-href => href(action=>"log", hash=>$tag{'refid'})}, "log");
                } elsif ($tag{'reftype'} eq "blob") {
-                       print " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$tag{'refid'}")}, "raw");
+                       print " | " . $cgi->a({-href => href(action=>"blob_plain", hash=>$tag{'refid'})}, "raw");
                }
                print "</td>\n" .
                      "</tr>";
@@ -1454,12 +1492,12 @@ sub git_heads_body {
                $alternate ^= 1;
                print "<td><i>$tag{'age'}</i></td>\n" .
                      ($tag{'id'} eq $head ? "<td class=\"current_head\">" : "<td>") .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog;h=$tag{'name'}"),
+                     $cgi->a({-href => href(action=>"shortlog", hash=>$tag{'name'}),
                               -class => "list"}, "<b>" . esc_html($tag{'name'}) . "</b>") .
                      "</td>\n" .
                      "<td class=\"link\">" .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog;h=$tag{'name'}")}, "shortlog") . " | " .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=log;h=$tag{'name'}")}, "log") .
+                     $cgi->a({-href => href(action=>"shortlog", hash=>$tag{'name'})}, "shortlog") . " | " .
+                     $cgi->a({-href => href(action=>"log", hash=>$tag{'name'})}, "log") .
                      "</td>\n" .
                      "</tr>";
        }
@@ -1668,8 +1706,18 @@ sub git_summary {
        print "<table cellspacing=\"0\">\n" .
              "<tr><td>description</td><td>" . esc_html($descr) . "</td></tr>\n" .
              "<tr><td>owner</td><td>$owner</td></tr>\n" .
-             "<tr><td>last change</td><td>$cd{'rfc2822'}</td></tr>\n" .
-             "</table>\n";
+             "<tr><td>last change</td><td>$cd{'rfc2822'}</td></tr>\n";
+       # use per project git URL list in $projectroot/$project/cloneurl
+       # or make project git URL from git base URL and project name
+       my $url_tag = "URL";
+       my @url_list = git_get_project_url_list($project);
+       @url_list = map { "$_/$project" } @git_base_url_list unless @url_list;
+       foreach my $git_url (@url_list) {
+               next unless $git_url;
+               print "<tr><td>$url_tag</td><td>$git_url</td></tr>\n";
+               $url_tag = "";
+       }
+       print "</table>\n";
 
        open my $fd, "-|", $GIT, "rev-list", "--max-count=17", git_get_head_hash($project)
                or die_error(undef, "Open git-rev-list failed");
@@ -1677,20 +1725,20 @@ sub git_summary {
        close $fd;
        git_print_header_div('shortlog');
        git_shortlog_body(\@revlist, 0, 15, $refs,
-                         $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=shortlog")}, "..."));
+                         $cgi->a({-href => href(action=>"shortlog")}, "..."));
 
        my $taglist = git_get_refs_list("refs/tags");
        if (defined @$taglist) {
                git_print_header_div('tags');
                git_tags_body($taglist, 0, 15,
-                             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tags")}, "..."));
+                             $cgi->a({-href => href(action=>"tags")}, "..."));
        }
 
        my $headlist = git_get_refs_list("refs/heads");
        if (defined @$headlist) {
                git_print_header_div('heads');
                git_heads_body($headlist, $head, 0, 15,
-                              $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=heads")}, "..."));
+                              $cgi->a({-href => href(action=>"heads")}, "..."));
        }
 
        git_footer_html();
@@ -1706,8 +1754,8 @@ sub git_tag {
              "<table cellspacing=\"0\">\n" .
              "<tr>\n" .
              "<td>object</td>\n" .
-             "<td>" . $cgi->a({-class => "list", -href => "$my_uri?" . esc_param("p=$project;a=$tag{'type'};h=$tag{'object'}")}, $tag{'object'}) . "</td>\n" .
-             "<td class=\"link\">" . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=$tag{'type'};h=$tag{'object'}")}, $tag{'type'}) . "</td>\n" .
+             "<td>" . $cgi->a({-class => "list", -href => href(action=>$tag{'type'}, hash=>$tag{'object'})}, $tag{'object'}) . "</td>\n" .
+             "<td class=\"link\">" . $cgi->a({-href => href(action=>$tag{'type'}, hash=>$tag{'object'})}, $tag{'type'}) . "</td>\n" .
              "</tr>\n";
        if (defined($tag{'author'})) {
                my %ad = parse_date($tag{'epoch'}, $tag{'tz'});
@@ -1746,8 +1794,8 @@ sub git_blame2 {
                or die_error(undef, "Open git-blame failed");
        git_header_html();
        my $formats_nav =
-               $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") .
-               " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;f=$file_name")}, "head");
+               $cgi->a({-href => href(action=>"blobl", hash=>$hash, hash_base=>$hash_base, file_name=>$file_name)}, "blob") .
+               " | " . $cgi->a({-href => href(action=>"blame", file_name=>$file_name)}, "head");
        git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
        git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
        git_print_page_path($file_name, $ftype);
@@ -1773,7 +1821,7 @@ sub git_blame2 {
                }
                print "<tr class=\"$rev_color[$current_color]\">\n";
                print "<td class=\"sha1\">" .
-                       $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$full_rev;f=$file_name")}, esc_html($rev)) . "</td>\n";
+                       $cgi->a({-href => href(action=>"commit", hash=>$full_rev, file_name=>$file_name)}, esc_html($rev)) . "</td>\n";
                print "<td class=\"linenr\"><a id=\"l$lineno\" href=\"#l$lineno\" class=\"linenr\">" . esc_html($lineno) . "</a></td>\n";
                print "<td class=\"pre\">" . esc_html($data) . "</td>\n";
                print "</tr>\n";
@@ -1800,8 +1848,8 @@ sub git_blame {
                or die_error(undef, "Open git-annotate failed");
        git_header_html();
        my $formats_nav =
-               $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;h=$hash;hb=$hash_base;f=$file_name")}, "blob") .
-               " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;f=$file_name")}, "head");
+               $cgi->a({-href => href(action=>"blobl", hash=>$hash, hash_base=>$hash_base, file_name=>$file_name)}, "blob") .
+               " | " . $cgi->a({-href => href(action=>"blame", file_name=>$file_name)}, "head");
        git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
        git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
        git_print_page_path($file_name, 'blob');
@@ -1856,7 +1904,7 @@ sub git_blame {
 
                print <<HTML;
   <tr class="$line_class[$line_class_num]">
-    <td class="sha1"><a href="$my_uri?${\esc_param ("p=$project;a=commit;h=$long_rev")}" class="text">$short_rev..</a></td>
+    <td class="sha1"><a href="${\href (action=>"commit", hash=>$long_rev)}" class="text">$short_rev..</a></td>
     <td class="$age_class">$age_str</td>
     <td>$author</td>
     <td class="linenr"><a id="$lineno" href="#$lineno" class="linenr">$lineno</a></td>
@@ -1952,13 +2000,13 @@ sub git_blob {
        if (defined $hash_base && (my %co = parse_commit($hash_base))) {
                if (defined $file_name) {
                        if ($have_blame) {
-                               $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;h=$hash;hb=$hash_base;f=$file_name")}, "blame") . " | ";
+                               $formats_nav .= $cgi->a({-href => href(action=>"blame", hash=>$hash, hash_base=>$hash_base, file_name=>$file_name)}, "blame") . " | ";
                        }
                        $formats_nav .=
-                               $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash;f=$file_name")}, "plain") .
-                               " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob;hb=HEAD;f=$file_name")}, "head");
+                               $cgi->a({-href => href(action=>"blob_plain", hash=>$hash, file_name=>$file_name)}, "plain") .
+                               " | " . $cgi->a({-href => href(action=>"blob", hash_base=>"HEAD", file_name=>$file_name)}, "head");
                } else {
-                       $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blob_plain;h=$hash")}, "plain");
+                       $formats_nav .= $cgi->a({-href => href(action=>"blob_plain", hash=>$hash)}, "plain");
                }
                git_print_page_nav('','', $hash_base,$co{'tree'},$hash_base, $formats_nav);
                git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
@@ -2102,8 +2150,8 @@ sub git_log {
                               $commit);
                print "<div class=\"title_text\">\n" .
                      "<div class=\"log_link\">\n" .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$commit")}, "commit") .
-                     " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff;h=$commit")}, "commitdiff") .
+                     $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") .
+                     " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") .
                      "<br/>\n" .
                      "</div>\n" .
                      "<i>" . esc_html($co{'author_name'}) .  " [$ad{'rfc2822'}]</i><br/>\n" .
@@ -2160,7 +2208,7 @@ sub git_commit {
        my $formats_nav = '';
        if (defined $file_name && defined $co{'parent'}) {
                my $parent = $co{'parent'};
-               $formats_nav .= $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=blame;hb=$parent;f=$file_name")}, "blame");
+               $formats_nav .= $cgi->a({-href => href(action=>"blame", hash_parent=>$parent, file_name=>$file_name)}, "blame");
        }
        git_header_html(undef, $expires);
        git_print_page_nav('commit', defined $co{'parent'} ? '' : 'commitdiff',
@@ -2190,19 +2238,19 @@ sub git_commit {
        print "<tr>" .
              "<td>tree</td>" .
              "<td class=\"sha1\">" .
-             $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tree;h=$co{'tree'};hb=$hash"), class => "list"}, $co{'tree'}) .
+             $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$hash), class => "list"}, $co{'tree'}) .
              "</td>" .
-             "<td class=\"link\">" . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=tree;h=$co{'tree'};hb=$hash")}, "tree") .
+             "<td class=\"link\">" . $cgi->a({-href => href(action=>"tree", hash=>$co{'tree'}, hash_base=>$hash)}, "tree") .
              "</td>" .
              "</tr>\n";
        my $parents = $co{'parents'};
        foreach my $par (@$parents) {
                print "<tr>" .
                      "<td>parent</td>" .
-                     "<td class=\"sha1\">" . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$par"), class => "list"}, $par) . "</td>" .
+                     "<td class=\"sha1\">" . $cgi->a({-href => href(action=>"commit", hash=>$par), class => "list"}, $par) . "</td>" .
                      "<td class=\"link\">" .
-                     $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commit;h=$par")}, "commit") .
-                     " | " . $cgi->a({-href => "$my_uri?" . esc_param("p=$project;a=commitdiff;h=$hash;hp=$par")}, "commitdiff") .
+                     $cgi->a({-href => href(action=>"commit", hash=>$par)}, "commit") .
+                     " | " . $cgi->a({-href => href(action=>"commitdiff", hash=>$hash, hash_parent=>$par)}, "commitdiff") .
                      "</td>" .
                      "</tr>\n";
        }
diff --git a/help.c b/help.c
index 6484cb9df2651de7430ee608ef7d14a4d3ac4c99..9ecdefdb03be7fac8d9283c93f2320f71bd062d6 100644 (file)
--- a/help.c
+++ b/help.c
@@ -14,7 +14,7 @@
 static int term_columns(void)
 {
        char *col_string = getenv("COLUMNS");
-       int n_cols = 0;
+       int n_cols;
 
        if (col_string && (n_cols = atoi(col_string)) > 0)
                return n_cols;
index de5fc44e660e3eb6f52191dd0983744447a2fe46..7f07d2a967fdecb497344817700962e9e213d3dd 100644 (file)
@@ -36,10 +36,10 @@ enum XML_Status {
 #define PREV_BUF_SIZE 4096
 #define RANGE_HEADER_SIZE 30
 
-static int commits_on_stdin = 0;
+static int commits_on_stdin;
 
 static int got_alternates = -1;
-static int corrupt_object_found = 0;
+static int corrupt_object_found;
 
 static struct curl_slist *no_pragma_header;
 
@@ -52,7 +52,7 @@ struct alt_base
        struct alt_base *next;
 };
 
-static struct alt_base *alt = NULL;
+static struct alt_base *alt;
 
 enum object_request_state {
        WAITING,
@@ -114,7 +114,7 @@ struct remote_ls_ctx
 };
 #endif
 
-static struct object_request *object_queue_head = NULL;
+static struct object_request *object_queue_head;
 
 static size_t fwrite_sha1_file(void *ptr, size_t eltsize, size_t nmemb,
                               void *data)
index 22a3e2bc0abbaadbe86a69dace48fd40ab575405..2bd984576523a7f2b646095eae92d08e7476b023 100644 (file)
@@ -70,18 +70,18 @@ enum XML_Status {
 /* We allow "recursive" symbolic refs. Only within reason, though */
 #define MAXDEPTH 5
 
-static int pushing = 0;
-static int aborted = 0;
+static int pushing;
+static int aborted;
 static signed char remote_dir_exists[256];
 
 static struct curl_slist *no_pragma_header;
 static struct curl_slist *default_headers;
 
-static int push_verbosely = 0;
-static int push_all = 0;
-static int force_all = 0;
+static int push_verbosely;
+static int push_all;
+static int force_all;
 
-static struct object_list *objects = NULL;
+static struct object_list *objects;
 
 struct repo
 {
@@ -94,7 +94,7 @@ struct repo
        struct remote_lock *locks;
 };
 
-static struct repo *remote = NULL;
+static struct repo *remote;
 
 enum transfer_state {
        NEED_FETCH,
@@ -134,7 +134,7 @@ struct transfer_request
        struct transfer_request *next;
 };
 
-static struct transfer_request *request_queue_head = NULL;
+static struct transfer_request *request_queue_head;
 
 struct xml_ctx
 {
index 7d01845d392ab891c8cfe9db9a218e4c2d70e53e..7b6875cce6c5a08db06e637abc48ce8f26216db4 100644 (file)
@@ -5,10 +5,10 @@
 #include "commit.h"
 #include "fetch.h"
 
-static int use_link = 0;
-static int use_symlink = 0;
+static int use_link;
+static int use_symlink;
 static int use_filecopy = 1;
-static int commits_on_stdin = 0;
+static int commits_on_stdin;
 
 static const char *path; /* "Remote" git repository */
 
@@ -16,7 +16,7 @@ void prefetch(unsigned char *sha1)
 {
 }
 
-static struct packed_git *packs = NULL;
+static struct packed_git *packs;
 
 static void setup_index(unsigned char *sha1)
 {
index 59f723f4047f831165b8d52ac13def398e663ac3..009caf804b43fdd644ff08991d55d0e417fd34d8 100644 (file)
@@ -2,7 +2,7 @@
 #include "cache.h"
 #include "commit.h"
 
-static int show_all = 0;
+static int show_all;
 
 static int merge_base(struct commit *rev1, struct commit *rev2)
 {
index 0498a6f45e53947e356c6a390869d3f8194f05b7..646d090c58e774bdf0f412da39f4b67fd7a696c6 100644 (file)
@@ -4,14 +4,15 @@
 
 #include "cache.h"
 
-static const char *pgm = NULL;
+static const char *pgm;
 static const char *arguments[8];
 static int one_shot, quiet;
 static int err;
 
 static void run_program(void)
 {
-       int pid = fork(), status;
+       pid_t pid = fork();
+       int status;
 
        if (pid < 0)
                die("unable to fork");
index 9a6f0d2f6b0be1307985b4bd56d0bc84abd1df02..93241385e4aee76fc42db5849365740c474b9bdd 100644 (file)
--- a/mktree.c
+++ b/mktree.c
@@ -49,7 +49,6 @@ static void write_tree(unsigned char *sha1)
        int i;
 
        qsort(entries, used, sizeof(*entries), ent_compare);
-       size = 100;
        for (size = i = 0; i < used; i++)
                size += 32 + entries[i]->len;
        buffer = xmalloc(size);
index 41fb960569e1c7ed479fb123902752c552ff1341..92a09ed36281b293a8c9002a33ab80f740949a37 100644 (file)
@@ -13,7 +13,7 @@
 static const char pack_redundant_usage[] =
 "git-pack-redundant [ --verbose ] [ --alt-odb ] < --all | <.pack filename> ...>";
 
-static int load_all_packs = 0, verbose = 0, alt_odb = 0;
+static int load_all_packs, verbose, alt_odb;
 
 struct llist_item {
        struct llist_item *next;
@@ -37,7 +37,7 @@ struct pll {
        struct pack_list *pl;
 };
 
-static struct llist_item *free_nodes = NULL;
+static struct llist_item *free_nodes;
 
 static inline void llist_item_put(struct llist_item *item)
 {
index be81ac2d2b9a68bfcc1b02b339ced49f44517efe..6bec833eecae934af1dce18683c70522481b002a 100644 (file)
 #define CACHE_EXT(s) ( (s[0]<<24)|(s[1]<<16)|(s[2]<<8)|(s[3]) )
 #define CACHE_EXT_TREE 0x54524545      /* "TREE" */
 
-struct cache_entry **active_cache = NULL;
+struct cache_entry **active_cache;
 static time_t index_file_timestamp;
-unsigned int active_nr = 0, active_alloc = 0, active_cache_changed = 0;
+unsigned int active_nr, active_alloc, active_cache_changed;
 
-struct cache_tree *active_cache_tree = NULL;
+struct cache_tree *active_cache_tree;
 
-int cache_errno = 0;
+int cache_errno;
 
-static void *cache_mmap = NULL;
-static size_t cache_mmap_size = 0;
+static void *cache_mmap;
+static size_t cache_mmap_size;
 
 /*
  * This only updates the "non-critical" parts of the directory
index 93929b5371bc0b9578ee5d3cb21c8ae6ade8cd1b..81e91909b8ac88423c550a6489285b003378c5f0 100644 (file)
@@ -8,10 +8,10 @@ static const char receive_pack_usage[] = "git-receive-pack <git-dir>";
 
 static const char *unpacker[] = { "unpack-objects", NULL };
 
-static int report_status = 0;
+static int report_status;
 
 static char capabilities[] = "report-status";
-static int capabilities_sent = 0;
+static int capabilities_sent;
 
 static int show_ref(const char *path, const unsigned char *sha1)
 {
@@ -40,7 +40,7 @@ struct command {
        char ref_name[FLEX_ARRAY]; /* more */
 };
 
-static struct command *commands = NULL;
+static struct command *commands;
 
 static int is_all_zeroes(const char *hex)
 {
index ca67ee9333e1f4125678fe607f44d75becc3cf7e..61908682b9b251ac49ae655522a3143476a888ea 100644 (file)
@@ -25,15 +25,15 @@ int run_command_v_opt(int argc, const char **argv, int flags)
        }
        for (;;) {
                int status, code;
-               int retval = waitpid(pid, &status, 0);
+               pid_t waiting = waitpid(pid, &status, 0);
 
-               if (retval < 0) {
+               if (waiting < 0) {
                        if (errno == EINTR)
                                continue;
-                       error("waitpid failed (%s)", strerror(retval));
+                       error("waitpid failed (%s)", strerror(errno));
                        return -ERR_RUN_COMMAND_WAITPID;
                }
-               if (retval != pid)
+               if (waiting != pid)
                        return -ERR_RUN_COMMAND_WAITPID_WRONG_PID;
                if (WIFSIGNALED(status))
                        return -ERR_RUN_COMMAND_WAITPID_SIGNAL;
index b7cc1a90891328912e93e1d545d9b56269661b18..43e10b0a620cc3d51d8905a9de36350ca6b67966 100644 (file)
@@ -9,10 +9,10 @@ static const char send_pack_usage[] =
 "git-send-pack [--all] [--exec=git-receive-pack] <remote> [<head>...]\n"
 "  --all and explicit <head> specification are mutually exclusive.";
 static const char *exec = "git-receive-pack";
-static int verbose = 0;
-static int send_all = 0;
-static int force_update = 0;
-static int use_thin_pack = 0;
+static int verbose;
+static int send_all;
+static int force_update;
+static int use_thin_pack;
 
 static int is_zero_sha1(const unsigned char *sha1)
 {
index 842a6f3ae86993ff877150ab92bbab7b4744b4ce..18dece46b1e248a4e52e9ead3bf172ed6ab78236 100644 (file)
@@ -22,7 +22,7 @@
 #endif
 #endif
 
-const unsigned char null_sha1[20] = { 0, };
+const unsigned char null_sha1[20];
 
 static unsigned int sha1_file_open_flag = O_NOATIME;
 
index c5a05faeb6b2bac74f4c5e06c5e397dc103bb190..f567454d22ada41b1565f26e7136e62b70769dfa 100644 (file)
@@ -191,7 +191,7 @@ const char *find_unique_abbrev(const unsigned char *sha1, int len)
        int status, is_null;
        static char hex[41];
 
-       is_null = !memcmp(sha1, null_sha1, 20);
+       is_null = is_null_sha1(sha1);
        memcpy(hex, sha1_to_hex(sha1), 40);
        if (len == 40 || !len)
                return hex;
index c7d8fa80e425695374f11746ae6592f52d8401d5..0b89df6ddae5cfdfa4259379fc801f5e28f7c403 100644 (file)
@@ -17,7 +17,7 @@
 static int fd_in;
 static int fd_out;
 
-static unsigned char remote_version = 0;
+static unsigned char remote_version;
 static unsigned char local_version = 1;
 
 static ssize_t force_write(int fd, void *buffer, size_t length)
@@ -36,9 +36,9 @@ static ssize_t force_write(int fd, void *buffer, size_t length)
        return ret;
 }
 
-static int prefetches = 0;
+static int prefetches;
 
-static struct object_list *in_transit = NULL;
+static struct object_list *in_transit;
 static struct object_list **end_of_transit = &in_transit;
 
 void prefetch(unsigned char *sha1)
@@ -59,7 +59,7 @@ void prefetch(unsigned char *sha1)
 }
 
 static char conn_buf[4096];
-static size_t conn_buf_posn = 0;
+static size_t conn_buf_posn;
 
 int fetch(unsigned char *sha1)
 {
index 2da66618fcdd6a0f5af35c9f30554a65eb427427..20b15eab57e1c4f7c4b306010d7d12bff2308141 100644 (file)
@@ -15,9 +15,9 @@
 #include <string.h>
 
 static unsigned char local_version = 1;
-static unsigned char remote_version = 0;
+static unsigned char remote_version;
 
-static int verbose = 0;
+static int verbose;
 
 static int serve_object(int fd_in, int fd_out) {
        ssize_t size;
index 900ca93cde02f82c35a59ee99349f9d0c4213867..e5e0bb9d513016c25956e18230dd4ba21fb2445b 100755 (executable)
@@ -59,6 +59,10 @@ test_expect_success \
      git-diff-tree -r -M --name-status  HEAD^ HEAD | \
      grep -E "^R100.+path0/README.+path2/README"'
 
+test_expect_success \
+    'succeed when source is a prefix of destination' \
+    'git-mv path2/COPYING path2/COPYING-renamed'
+
 test_expect_success \
     'moving whole subdirectory into subdirectory' \
     'git-mv path2 path1'
index a20639be70edb13bc87353a69a13f17994ea41a5..43ed12484f6eb8bb828987872b2782182e579b9f 100644 (file)
@@ -278,7 +278,7 @@ static void unlink_entry(char *name)
        }
 }
 
-static volatile int progress_update = 0;
+static volatile sig_atomic_t progress_update;
 
 static void progress_interval(int signum)
 {
index 27e2abe36c54fbf4ff04a70a64e1985fc4a8cbd0..fcf279843ad23b0605f3c2bc558e8d04a903554b 100644 (file)
@@ -14,12 +14,12 @@ static const char upload_pack_usage[] = "git-upload-pack [--strict] [--timeout=n
 #define THEY_HAVE (1U << 0)
 #define OUR_REF (1U << 1)
 #define WANTED (1U << 2)
-static int multi_ack = 0, nr_our_refs = 0;
-static int use_thin_pack = 0;
+static int multi_ack, nr_our_refs;
+static int use_thin_pack;
 static struct object_array have_obj;
 static struct object_array want_obj;
-static unsigned int timeout = 0;
-static int use_sideband = 0;
+static unsigned int timeout;
+static int use_sideband;
 
 static void reset_timeout(void)
 {