summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/git-ls-files.txt9
-rw-r--r--Makefile2
-rw-r--r--debian/changelog6
-rwxr-xr-xgit-merge.sh11
-rw-r--r--ls-files.c2
-rw-r--r--mailinfo.c2
-rw-r--r--sha1_file.c16
-rw-r--r--show-branch.c71
-rwxr-xr-xt/t5300-pack-object.sh7
9 files changed, 109 insertions, 17 deletions
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 <pattern>|--exclude=<pattern>]
[-X <file>|--exclude-from=<file>]
- [--exclude-per-directory=<file>] [--] [<file>]\*
+ [--exclude-per-directory=<file>]
+ [--full-name] [--] [<file>]\*
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 <junkio@cox.net> 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=<pattern>] [--exclude-from=<file>] "
- "[ --exclude-per-directory=<filename> ] [--] [<file>]*";
+ "[ --exclude-per-directory=<filename> ] [--full-name] [--] [<file>]*";
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 \