Browse Source

Merge branch 'lt/rev-list-gitlink'

* lt/rev-list-gitlink:
  Fix rev-list when showing objects involving submodules
maint
Junio C Hamano 17 years ago
parent
commit
5d3d1cacc1
  1. 2
      builtin-pack-objects.c
  2. 11
      revision.c
  3. 42
      t/t6008-rev-list-submodule.sh
  4. 7
      tree-walk.h

2
builtin-pack-objects.c

@ -990,7 +990,7 @@ static void add_pbase_object(struct tree_desc *tree, @@ -990,7 +990,7 @@ static void add_pbase_object(struct tree_desc *tree,
return;
if (name[cmplen] != '/') {
add_object_entry(entry.sha1,
S_ISDIR(entry.mode) ? OBJ_TREE : OBJ_BLOB,
object_type(entry.mode),
fullname, 1);
return;
}

11
revision.c

@ -67,10 +67,17 @@ void mark_tree_uninteresting(struct tree *tree) @@ -67,10 +67,17 @@ void mark_tree_uninteresting(struct tree *tree)

init_tree_desc(&desc, tree->buffer, tree->size);
while (tree_entry(&desc, &entry)) {
if (S_ISDIR(entry.mode))
switch (object_type(entry.mode)) {
case OBJ_TREE:
mark_tree_uninteresting(lookup_tree(entry.sha1));
else
break;
case OBJ_BLOB:
mark_blob_uninteresting(lookup_blob(entry.sha1));
break;
default:
/* Subproject commit - not in this repository */
break;
}
}

/*

42
t/t6008-rev-list-submodule.sh

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
#!/bin/sh
#
# Copyright (c) 2007 Johannes E. Schindelin
#

test_description='git rev-list involving submodules that this repo has'

. ./test-lib.sh

test_expect_success 'setup' '
: > file &&
git add file &&
test_tick &&
git commit -m initial &&
echo 1 > file &&
test_tick &&
git commit -m second file &&
echo 2 > file &&
test_tick &&
git commit -m third file &&

rm .git/index &&

: > super-file &&
git add super-file &&
git submodule add . sub &&
git symbolic-ref HEAD refs/heads/super &&
test_tick &&
git commit -m super-initial &&
echo 1 > super-file &&
test_tick &&
git commit -m super-first super-file &&
echo 2 > super-file &&
test_tick &&
git commit -m super-second super-file
'

test_expect_success "Ilari's test" '
git rev-list --objects super master ^super^
'

test_done

7
tree-walk.h

@ -7,6 +7,13 @@ struct name_entry { @@ -7,6 +7,13 @@ struct name_entry {
unsigned int mode;
};

static inline enum object_type object_type(unsigned int mode)
{
return S_ISDIR(mode) ? OBJ_TREE :
S_ISGITLINK(mode) ? OBJ_COMMIT :
OBJ_BLOB;
}

struct tree_desc {
const void *buffer;
struct name_entry entry;

Loading…
Cancel
Save