Browse Source

Merge fixes up to GIT 1.0.5

maint
Junio C Hamano 19 years ago
parent
commit
36de72aa9d
  1. 3
      commit.c
  2. 8
      diff.c
  3. 6
      diffcore-order.c
  4. 3
      diffcore-pathspec.c
  5. 2
      diffcore-rename.c
  6. 22
      index-pack.c
  7. 17
      read-tree.c
  8. 85
      t/t4011-diff-symlink.sh
  9. 8
      t/t5300-pack-object.sh
  10. 4
      tree-diff.c

3
commit.c

@ -560,6 +560,9 @@ void sort_in_topological_order(struct commit_list ** list)
next = next->next; next = next->next;
count++; count++;
} }
if (!count)
return;
/* allocate an array to help sort the list */ /* allocate an array to help sort the list */
nodes = xcalloc(count, sizeof(*nodes)); nodes = xcalloc(count, sizeof(*nodes));
/* link the list to the array */ /* link the list to the array */

8
diff.c

@ -504,9 +504,9 @@ static void prepare_temp_file(const char *name,
} }
if (S_ISLNK(st.st_mode)) { if (S_ISLNK(st.st_mode)) {
int ret; int ret;
char *buf, buf_[1024]; char buf[PATH_MAX + 1]; /* ought to be SYMLINK_MAX */
buf = ((sizeof(buf_) < st.st_size) ? if (sizeof(buf) <= st.st_size)
xmalloc(st.st_size) : buf_); die("symlink too long: %s", name);
ret = readlink(name, buf, st.st_size); ret = readlink(name, buf, st.st_size);
if (ret < 0) if (ret < 0)
die("readlink(%s)", name); die("readlink(%s)", name);
@ -650,7 +650,7 @@ static void diff_fill_sha1_info(struct diff_filespec *one)
if (DIFF_FILE_VALID(one)) { if (DIFF_FILE_VALID(one)) {
if (!one->sha1_valid) { if (!one->sha1_valid) {
struct stat st; struct stat st;
if (stat(one->path, &st) < 0) if (lstat(one->path, &st) < 0)
die("stat %s", one->path); die("stat %s", one->path);
if (index_path(one->sha1, one->path, &st, 0)) if (index_path(one->sha1, one->path, &st, 0))
die("cannot hash %s\n", one->path); die("cannot hash %s\n", one->path);

6
diffcore-order.c

@ -105,9 +105,13 @@ static int compare_pair_order(const void *a_, const void *b_)
void diffcore_order(const char *orderfile) void diffcore_order(const char *orderfile)
{ {
struct diff_queue_struct *q = &diff_queued_diff; struct diff_queue_struct *q = &diff_queued_diff;
struct pair_order *o = xmalloc(sizeof(*o) * q->nr); struct pair_order *o;
int i; int i;


if (!q->nr)
return;

o = xmalloc(sizeof(*o) * q->nr);
prepare_order(orderfile); prepare_order(orderfile);
for (i = 0; i < q->nr; i++) { for (i = 0; i < q->nr; i++) {
o[i].pair = q->queue[i]; o[i].pair = q->queue[i];

3
diffcore-pathspec.c

@ -48,6 +48,9 @@ void diffcore_pathspec(const char **pathspec)
for (i = 0; pathspec[i]; i++) for (i = 0; pathspec[i]; i++)
; ;
speccnt = i; speccnt = i;
if (!speccnt)
return;

spec = xmalloc(sizeof(*spec) * speccnt); spec = xmalloc(sizeof(*spec) * speccnt);
for (i = 0; pathspec[i]; i++) { for (i = 0; pathspec[i]; i++) {
spec[i].spec = pathspec[i]; spec[i].spec = pathspec[i];

2
diffcore-rename.c

@ -282,7 +282,7 @@ void diffcore_rename(struct diff_options *options)
else if (detect_rename == DIFF_DETECT_COPY) else if (detect_rename == DIFF_DETECT_COPY)
register_rename_src(p->one, 1); register_rename_src(p->one, 1);
} }
if (rename_dst_nr == 0 || if (rename_dst_nr == 0 || rename_src_nr == 0 ||
(0 < rename_limit && rename_limit < rename_dst_nr)) (0 < rename_limit && rename_limit < rename_dst_nr))
goto cleanup; /* nothing to do */ goto cleanup; /* nothing to do */



22
index-pack.c

@ -352,18 +352,24 @@ static int sha1_compare(const void *_a, const void *_b)
static void write_index_file(const char *index_name, unsigned char *sha1) static void write_index_file(const char *index_name, unsigned char *sha1)
{ {
struct sha1file *f; struct sha1file *f;
struct object_entry **sorted_by_sha = struct object_entry **sorted_by_sha, **list, **last;
xcalloc(nr_objects, sizeof(struct object_entry *));
struct object_entry **list = sorted_by_sha;
struct object_entry **last = sorted_by_sha + nr_objects;
unsigned int array[256]; unsigned int array[256];
int i; int i;
SHA_CTX ctx; SHA_CTX ctx;


for (i = 0; i < nr_objects; ++i) if (nr_objects) {
sorted_by_sha[i] = &objects[i]; sorted_by_sha =
qsort(sorted_by_sha, nr_objects, sizeof(sorted_by_sha[0]), xcalloc(nr_objects, sizeof(struct object_entry *));
sha1_compare); list = sorted_by_sha;
last = sorted_by_sha + nr_objects;
for (i = 0; i < nr_objects; ++i)
sorted_by_sha[i] = &objects[i];
qsort(sorted_by_sha, nr_objects, sizeof(sorted_by_sha[0]),
sha1_compare);

}
else
sorted_by_sha = list = last = NULL;


unlink(index_name); unlink(index_name);
f = sha1create("%s", index_name); f = sha1create("%s", index_name);

17
read-tree.c

@ -294,17 +294,20 @@ static int unpack_trees(merge_fn_t fn)
{ {
int indpos = 0; int indpos = 0;
unsigned len = object_list_length(trees); unsigned len = object_list_length(trees);
struct tree_entry_list **posns = struct tree_entry_list **posns;
xmalloc(len * sizeof(struct tree_entry_list *));
int i; int i;
struct object_list *posn = trees; struct object_list *posn = trees;
merge_size = len; merge_size = len;
for (i = 0; i < len; i++) {
posns[i] = ((struct tree *) posn->item)->entries; if (len) {
posn = posn->next; posns = xmalloc(len * sizeof(struct tree_entry_list *));
for (i = 0; i < len; i++) {
posns[i] = ((struct tree *) posn->item)->entries;
posn = posn->next;
}
if (unpack_trees_rec(posns, len, "", fn, &indpos))
return -1;
} }
if (unpack_trees_rec(posns, len, "", fn, &indpos))
return -1;


if (trivial_merges_only && nontrivial_merge) if (trivial_merges_only && nontrivial_merge)
die("Merge requires file-level merging"); die("Merge requires file-level merging");

85
t/t4011-diff-symlink.sh

@ -0,0 +1,85 @@
#!/bin/sh
#
# Copyright (c) 2005 Johannes Schindelin
#

test_description='Test diff of symlinks.

'
. ./test-lib.sh
. ../diff-lib.sh

cat > expected << EOF
diff --git a/frotz b/frotz
new file mode 120000
index 0000000..7c465af
--- /dev/null
+++ b/frotz
@@ -0,0 +1 @@
+xyzzy
\ No newline at end of file
EOF

test_expect_success \
'diff new symlink' \
'ln -s xyzzy frotz &&
git-update-index &&
tree=$(git-write-tree) &&
git-update-index --add frotz &&
GIT_DIFF_OPTS=--unified=0 git-diff-index -M -p $tree > current &&
compare_diff_patch current expected'

test_expect_success \
'diff unchanged symlink' \
'tree=$(git-write-tree) &&
git-update-index frotz &&
test -z "$(git-diff-index --name-only $tree)"'

cat > expected << EOF
diff --git a/frotz b/frotz
deleted file mode 120000
index 7c465af..0000000
--- a/frotz
+++ /dev/null
@@ -1 +0,0 @@
-xyzzy
\ No newline at end of file
EOF

test_expect_success \
'diff removed symlink' \
'rm frotz &&
git-diff-index -M -p $tree > current &&
compare_diff_patch current expected'

cat > expected << EOF
diff --git a/frotz b/frotz
EOF

test_expect_success \
'diff identical, but newly created symlink' \
'sleep 1 &&
ln -s xyzzy frotz &&
git-diff-index -M -p $tree > current &&
compare_diff_patch current expected'

cat > expected << EOF
diff --git a/frotz b/frotz
index 7c465af..df1db54 120000
--- a/frotz
+++ b/frotz
@@ -1 +1 @@
-xyzzy
\ No newline at end of file
+yxyyz
\ No newline at end of file
EOF

test_expect_success \
'diff different symlink' \
'rm frotz &&
ln -s yxyyz frotz &&
git-diff-index -M -p $tree > current &&
compare_diff_patch current expected'

test_done

8
t/t5300-pack-object.sh

@ -142,6 +142,7 @@ test_expect_success \
else :; else :;
fi && fi &&


: PACK_SIGNATURE &&
cp test-1-${packname_1}.pack test-3.pack && cp test-1-${packname_1}.pack test-3.pack &&
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=2 && dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=2 &&
if git-verify-pack test-3.idx if git-verify-pack test-3.idx
@ -149,6 +150,7 @@ test_expect_success \
else :; else :;
fi && fi &&


: PACK_VERSION &&
cp test-1-${packname_1}.pack test-3.pack && cp test-1-${packname_1}.pack test-3.pack &&
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=7 && dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=7 &&
if git-verify-pack test-3.idx if git-verify-pack test-3.idx
@ -156,6 +158,7 @@ test_expect_success \
else :; else :;
fi && fi &&


: TYPE/SIZE byte of the first packed object data &&
cp test-1-${packname_1}.pack test-3.pack && cp test-1-${packname_1}.pack test-3.pack &&
dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=12 && dd if=/dev/zero of=test-3.pack count=1 bs=1 conv=notrunc seek=12 &&
if git-verify-pack test-3.idx if git-verify-pack test-3.idx
@ -163,8 +166,11 @@ test_expect_success \
else :; else :;
fi && fi &&


: sum of the index file itself &&
l=`wc -c <test-3.idx` &&
l=`expr "$l" - 20` &&
cp test-1-${packname_1}.pack test-3.pack && 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 && dd if=/dev/zero of=test-3.idx count=20 bs=1 conv=notrunc seek=$l &&
if git-verify-pack test-3.pack if git-verify-pack test-3.pack
then false then false
else :; else :;

4
tree-diff.c

@ -263,6 +263,10 @@ void diff_tree_setup_paths(const char **p)


paths = p; paths = p;
nr_paths = count_paths(paths); nr_paths = count_paths(paths);
if (nr_paths == 0) {
pathlens = NULL;
return;
}
pathlens = xmalloc(nr_paths * sizeof(int)); pathlens = xmalloc(nr_paths * sizeof(int));
for (i=0; i<nr_paths; i++) for (i=0; i<nr_paths; i++)
pathlens[i] = strlen(paths[i]); pathlens[i] = strlen(paths[i]);

Loading…
Cancel
Save