Skip to content

Commit

Permalink
Merge branch 'lt/maint-rev-list-gitlink' into maint
Browse files Browse the repository at this point in the history
* lt/maint-rev-list-gitlink:
  Fix rev-list when showing objects involving submodules
  • Loading branch information
Junio C Hamano committed Nov 25, 2007
2 parents bc2b8ea + 481f0ee commit be4b37b
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 3 deletions.
2 changes: 1 addition & 1 deletion builtin-pack-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -989,7 +989,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;
}
Expand Down
11 changes: 9 additions & 2 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,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;
}
}

/*
Expand Down
42 changes: 42 additions & 0 deletions t/t6008-rev-list-submodule.sh
Original file line number Diff line number Diff line change
@@ -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 changes: 7 additions & 0 deletions tree-walk.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit be4b37b

Please sign in to comment.