diff options
| author | Junio C Hamano <junkio@cox.net> | 2007-04-21 17:21:10 -0700 |
|---|---|---|
| committer | Junio C Hamano <junkio@cox.net> | 2007-04-21 17:21:10 -0700 |
| commit | afb5b6a24bd333d298d10acac731f1c127bbb82d (patch) | |
| tree | 9c403d4fa96f00d172e5b0a95602b68be839086f /tree.c | |
| parent | 99ebd06c18fdb7f8274db6cca456a95942916bb6 (diff) | |
| parent | 1c3e5c4ebc326c5c70350d3f4dc7f2b29e813480 (diff) | |
| download | git-afb5b6a24bd333d298d10acac731f1c127bbb82d.tar.gz | |
Merge branch 'lt/gitlink'
* lt/gitlink:
Tests for core subproject support
Expose subprojects as special files to "git diff" machinery
Fix some "git ls-files -o" fallout from gitlinks
Teach "git-read-tree -u" to check out submodules as a directory
Teach git list-objects logic to not follow gitlinks
Fix gitlink index entry filesystem matching
Teach "git-read-tree -u" to check out submodules as a directory
Teach git list-objects logic not to follow gitlinks
Don't show gitlink directories when we want "other" files
Teach git-update-index about gitlinks
Teach directory traversal about subprojects
Fix thinko in subproject entry sorting
Teach core object handling functions about gitlinks
Teach "fsck" not to follow subproject links
Add "S_IFDIRLNK" file mode infrastructure for git links
Add 'resolve_gitlink_ref()' helper function
Avoid overflowing name buffer in deep directory structures
diff-lib: use ce_mode_from_stat() rather than messing with modes manually
Diffstat (limited to 'tree.c')
| -rw-r--r-- | tree.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -143,6 +143,14 @@ struct tree *lookup_tree(const unsigned char *sha1) return (struct tree *) obj; } +/* + * NOTE! Tree refs to external git repositories + * (ie gitlinks) do not count as real references. + * + * You don't have to have those repositories + * available at all, much less have the objects + * accessible from the current repository. + */ static void track_tree_refs(struct tree *item) { int n_refs = 0, i; @@ -152,8 +160,11 @@ static void track_tree_refs(struct tree *item) /* Count how many entries there are.. */ init_tree_desc(&desc, item->buffer, item->size); - while (tree_entry(&desc, &entry)) + while (tree_entry(&desc, &entry)) { + if (S_ISDIRLNK(entry.mode)) + continue; n_refs++; + } /* Allocate object refs and walk it again.. */ i = 0; @@ -162,6 +173,8 @@ static void track_tree_refs(struct tree *item) while (tree_entry(&desc, &entry)) { struct object *obj; + if (S_ISDIRLNK(entry.mode)) + continue; if (S_ISDIR(entry.mode)) obj = &lookup_tree(entry.sha1)->object; else |
