diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 2f308ecda9..186f3bb57a 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -13,7 +13,8 @@ SYNOPSIS (-[c|d|o|i|s|u|k|m])\* [-x |--exclude=] [-X |--exclude-from=] - [--exclude-per-directory=] [--] []\* + [--exclude-per-directory=] + [--full-name] [--] []\* DESCRIPTION ----------- @@ -77,6 +78,12 @@ OPTIONS K:: to be killed ? other +--full-name:: + When run from a subdirectory, the command usually + outputs paths relative to the current directory. This + option forces paths to be output relative to the project + top directory. + --:: Do not interpret any more arguments as options. diff --git a/Makefile b/Makefile index 890f16bdad..8d03e0b143 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ all: # Define USE_STDEV below if you want git to care about the underlying device # change being considered an inode change from the update-cache perspective. -GIT_VERSION = 1.0.3 +GIT_VERSION = 1.0.4 # CFLAGS and LDFLAGS are for the users to override from the command line. diff --git a/debian/changelog b/debian/changelog index 53af1d64c3..88e5755f79 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +git-core (1.0.4-0) unstable; urgency=low + + * GIT 1.0.4. + + -- Junio C Hamano Sat, 24 Dec 2005 00:01:20 -0800 + git-core (1.0.3-0) unstable; urgency=low * GIT 1.0.3 maintenance release. diff --git a/git-merge.sh b/git-merge.sh index e50fbb1160..0a158ef779 100755 --- a/git-merge.sh +++ b/git-merge.sh @@ -209,6 +209,7 @@ case "$use_strategies" in esac result_tree= best_cnt=-1 best_strategy= wt_strategy= +merge_was_ok= for strategy in $use_strategies do test "$wt_strategy" = '' || { @@ -228,6 +229,7 @@ do exit=$? if test "$no_commit" = t && test "$exit" = 0 then + merge_was_ok=t exit=1 ;# pretend it left conflicts. fi @@ -293,4 +295,11 @@ do done >"$GIT_DIR/MERGE_HEAD" echo $merge_msg >"$GIT_DIR/MERGE_MSG" -die "Automatic merge failed/prevented; fix up by hand" +if test "$merge_was_ok" = t +then + echo >&2 \ + "Automatic merge went well; stopped before committing as requested" + exit 0 +else + die "Automatic merge failed; fix up by hand" +fi diff --git a/ls-files.c b/ls-files.c index f3f1a6a663..5e9ac712af 100644 --- a/ls-files.c +++ b/ls-files.c @@ -562,7 +562,7 @@ static void verify_pathspec(void) static const char ls_files_usage[] = "git-ls-files [-z] [-t] (--[cached|deleted|others|stage|unmerged|killed|modified])* " "[ --ignored ] [--exclude=] [--exclude-from=] " - "[ --exclude-per-directory= ] [--] []*"; + "[ --exclude-per-directory= ] [--full-name] [--] []*"; int main(int argc, const char **argv) { diff --git a/mailinfo.c b/mailinfo.c index 9f95f37651..0265a29a38 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -472,7 +472,7 @@ static void convert_to_utf8(char *line, char *charset) char *in, *out; size_t insize, outsize, nrc; char outbuf[4096]; /* cheat */ - static char latin_one[] = "latin-1"; + static char latin_one[] = "latin1"; char *input_charset = *charset ? charset : latin_one; iconv_t conv = iconv_open(metainfo_charset, input_charset); diff --git a/sha1_file.c b/sha1_file.c index d451a94efe..6b7577dbc4 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -321,12 +321,16 @@ struct packed_git *packed_git; static int check_packed_git_idx(const char *path, unsigned long *idx_size_, void **idx_map_) { + SHA_CTX ctx; + unsigned char sha1[20]; void *idx_map; unsigned int *index; unsigned long idx_size; int nr, i; - int fd = open(path, O_RDONLY); + int fd; struct stat st; + + fd = open(path, O_RDONLY); if (fd < 0) return -1; if (fstat(fd, &st)) { @@ -364,6 +368,16 @@ static int check_packed_git_idx(const char *path, unsigned long *idx_size_, if (idx_size != 4*256 + nr * 24 + 20 + 20) return error("wrong index file size"); + /* + * File checksum. + */ + SHA1_Init(&ctx); + SHA1_Update(&ctx, idx_map, idx_size-20); + SHA1_Final(sha1, &ctx); + + if (memcmp(sha1, idx_map + idx_size - 20, 20)) + return error("index checksum mismatch"); + return 0; } diff --git a/show-branch.c b/show-branch.c index 3fe62b7177..15b1968781 100644 --- a/show-branch.c +++ b/show-branch.c @@ -284,10 +284,54 @@ static void show_one_commit(struct commit *commit, int no_name) static char *ref_name[MAX_REVS + 1]; static int ref_name_cnt; +static const char *find_digit_prefix(const char *s, int *v) +{ + const char *p; + int ver; + char ch; + + for (p = s, ver = 0; + '0' <= (ch = *p) && ch <= '9'; + p++) + ver = ver * 10 + ch - '0'; + *v = ver; + return p; +} + + +static int version_cmp(const char *a, const char *b) +{ + while (1) { + int va, vb; + + a = find_digit_prefix(a, &va); + b = find_digit_prefix(b, &vb); + if (va != vb) + return va - vb; + + while (1) { + int ca = *a; + int cb = *b; + if ('0' <= ca && ca <= '9') + ca = 0; + if ('0' <= cb && cb <= '9') + cb = 0; + if (ca != cb) + return ca - cb; + if (!ca) + break; + a++; + b++; + } + if (!*a && !*b) + return 0; + } +} + static int compare_ref_name(const void *a_, const void *b_) { const char * const*a = a_, * const*b = b_; - return strcmp(*a, *b); + return version_cmp(*a, *b); } static void sort_ref_range(int bottom, int top) @@ -299,8 +343,15 @@ static void sort_ref_range(int bottom, int top) static int append_ref(const char *refname, const unsigned char *sha1) { struct commit *commit = lookup_commit_reference_gently(sha1, 1); + int i; + if (!commit) return 0; + /* Avoid adding the same thing twice */ + for (i = 0; i < ref_name_cnt; i++) + if (!strcmp(refname, ref_name[i])) + return 0; + if (MAX_REVS <= ref_name_cnt) { fprintf(stderr, "warning: ignoring %s; " "cannot handle more than %d refs\n", @@ -512,19 +563,17 @@ int main(int ac, char **av) if (1 < independent + merge_base + (extra != 0)) usage(show_branch_usage); + /* If nothing is specified, show all branches by default */ + if (ac + all_heads + all_tags == 0) + all_heads = 1; + if (all_heads + all_tags) snarf_refs(all_heads, all_tags); - - if (ac) { - while (0 < ac) { - append_one_rev(*av); - ac--; av++; - } - } - else { - /* If no revs given, then add heads */ - snarf_refs(1, 0); + while (0 < ac) { + append_one_rev(*av); + ac--; av++; } + if (!ref_name_cnt) { fprintf(stderr, "No revs to be shown.\n"); exit(0); diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh index 5b50536b54..7dfb1ab77b 100755 --- a/t/t5300-pack-object.sh +++ b/t/t5300-pack-object.sh @@ -163,6 +163,13 @@ test_expect_success \ else :; fi && + cp test-1-${packname_1}.pack test-3.pack && + dd if=/dev/zero of=test-3.idx count=1 bs=1 conv=notrunc seek=1200 && + if git-verify-pack test-3.pack + then false + else :; + fi && + :' test_expect_success \