Skip to content

Commit

Permalink
[PATCH] Do not call fetch() when we have it.
Browse files Browse the repository at this point in the history
Currently pull() calls fetch() without checking whether we have
the wanted object but all of the existing fetch()
implementations perform this check and return success
themselves.  This patch moves the check to the caller.

I will be sending a trivial git-local-pull which depends on
this in the next message.

Signed-off-by: Junio C Hamano <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Junio C Hamano authored and Linus Torvalds committed May 2, 2005
1 parent 9053521 commit ee4f439
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 11 deletions.
4 changes: 0 additions & 4 deletions http-pull.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,6 @@ int fetch(unsigned char *sha1)
char *url;
char *posn;

if (has_sha1_file(sha1)) {
return 0;
}

local = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);

if (local < 0)
Expand Down
17 changes: 12 additions & 5 deletions pull.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ int get_tree = 0;
int get_history = 0;
int get_all = 0;

static int make_sure_we_have_it(unsigned char *sha1)
{
if (has_sha1_file(sha1))
return 0;
return fetch(sha1);
}

static int process_tree(unsigned char *sha1)
{
struct tree *tree = lookup_tree(sha1);
Expand All @@ -17,7 +24,7 @@ static int process_tree(unsigned char *sha1)
return -1;

for (entries = tree->entries; entries; entries = entries->next) {
if (fetch(entries->item.tree->object.sha1))
if (make_sure_we_have_it(entries->item.tree->object.sha1))
return -1;
if (entries->directory) {
if (process_tree(entries->item.tree->object.sha1))
Expand All @@ -31,14 +38,14 @@ static int process_commit(unsigned char *sha1)
{
struct commit *obj = lookup_commit(sha1);

if (fetch(sha1))
if (make_sure_we_have_it(sha1))
return -1;

if (parse_commit(obj))
return -1;

if (get_tree) {
if (fetch(obj->tree->object.sha1))
if (make_sure_we_have_it(obj->tree->object.sha1))
return -1;
if (process_tree(obj->tree->object.sha1))
return -1;
Expand All @@ -50,7 +57,7 @@ static int process_commit(unsigned char *sha1)
for (; parents; parents = parents->next) {
if (has_sha1_file(parents->item->object.sha1))
continue;
if (fetch(parents->item->object.sha1)) {
if (make_sure_we_have_it(parents->item->object.sha1)) {
/* The server might not have it, and
* we don't mind.
*/
Expand All @@ -70,7 +77,7 @@ int pull(char *target)
retval = get_sha1_hex(target, sha1);
if (retval)
return retval;
retval = fetch(sha1);
retval = make_sure_we_have_it(sha1);
if (retval)
return retval;
return process_commit(sha1);
Expand Down
2 changes: 0 additions & 2 deletions rpull.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ static int fd_out;

int fetch(unsigned char *sha1)
{
if (has_sha1_file(sha1))
return 0;
write(fd_out, sha1, 20);
return write_sha1_from_fd(sha1, fd_in);
}
Expand Down

0 comments on commit ee4f439

Please sign in to comment.