summaryrefslogtreecommitdiff
path: root/fetch.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-05-28 22:47:53 -0700
committerJunio C Hamano <junkio@cox.net>2006-05-28 22:47:53 -0700
commit0a2586c807fadc4b13a741e693471765870f6bb4 (patch)
tree9c62558c76d02057e71f6152c8d73b9cb1cf536e /fetch.c
parent7d55561986ffe94ca7ca22dc0a6846f698893226 (diff)
parent097dc3d8c32f4b85bf9701d5e1de98999ac25c1c (diff)
downloadgit-0a2586c807fadc4b13a741e693471765870f6bb4.tar.gz
Merge branch 'lt/tree' into jc/lt-tree-n-cache-tree
* lt/tree: (98 commits) Remove "tree->entries" tree-entry list from tree parser Switch "read_tree_recursive()" over to tree-walk functionality Make "tree_entry" have a SHA1 instead of a union of object pointers Add raw tree buffer info to "struct tree" Don't use "sscanf()" for tree mode scanning git-fetch: avoid using "case ... in (arm)" mailinfo: skip bogus UNIX From line inside body mailinfo: More carefully parse header lines in read_one_header_line() Allow in body headers beyond the in body header prefix. More accurately detect header lines in read_one_header_line In handle_body only read a line if we don't already have one. Refactor commit messge handling. Move B and Q decoding into check header. Make read_one_header_line return a flag not a length. Fix memory leak in "git rev-list --objects" gitview: Move the console error messages to message dialog gitview: Add key binding for F5. Let git-clone to pass --template=dir option to git-init-db. Make cvsexportcommit create parent directories as needed. Document current cvsexportcommit limitations. ... Conflicts: Makefile, builtin.h, git.c are trivially resolved. builtin-read-tree.c needed adjustment for the tree parser change.
Diffstat (limited to 'fetch.c')
-rw-r--r--fetch.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/fetch.c b/fetch.c
index 73bde07aea..d9fe41f34f 100644
--- a/fetch.c
+++ b/fetch.c
@@ -9,8 +9,6 @@
const char *write_ref = NULL;
-const unsigned char *current_ref = NULL;
-
int get_tree = 0;
int get_history = 0;
int get_all = 0;
@@ -43,16 +41,22 @@ static int process_tree(struct tree *tree)
if (parse_tree(tree))
return -1;
- entry = tree->entries;
- tree->entries = NULL;
+ entry = create_tree_entry_list(tree);
while (entry) {
struct tree_entry_list *next = entry->next;
- if (process(entry->item.any))
- return -1;
- free(entry->name);
+
+ if (entry->directory) {
+ struct tree *tree = lookup_tree(entry->sha1);
+ process_tree(tree);
+ } else {
+ struct blob *blob = lookup_blob(entry->sha1);
+ process(&blob->object);
+ }
free(entry);
entry = next;
}
+ free(tree->buffer);
+ tree->buffer = NULL;
return 0;
}
@@ -205,19 +209,12 @@ static int mark_complete(const char *path, const unsigned char *sha1)
int pull(char *target)
{
unsigned char sha1[20];
- int fd = -1;
save_commit_buffer = 0;
track_object_refs = 0;
- if (write_ref && current_ref) {
- fd = lock_ref_sha1(write_ref, current_ref);
- if (fd < 0)
- return -1;
- }
- if (!get_recover) {
+ if (!get_recover)
for_each_ref(mark_complete);
- }
if (interpret_target(target, sha1))
return error("Could not interpret %s as something to pull",
@@ -227,12 +224,7 @@ int pull(char *target)
if (loop())
return -1;
- if (write_ref) {
- if (current_ref) {
- write_ref_sha1(write_ref, fd, sha1);
- } else {
- write_ref_sha1_unlocked(write_ref, sha1);
- }
- }
+ if (write_ref)
+ write_ref_sha1_unlocked(write_ref, sha1);
return 0;
}