[PATCH] Do not call fetch() when we have it.
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 <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
90535218dd
commit
ee4f439fea
@ -53,10 +53,6 @@ int fetch(unsigned char *sha1)
|
|||||||
char *url;
|
char *url;
|
||||||
char *posn;
|
char *posn;
|
||||||
|
|
||||||
if (has_sha1_file(sha1)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
local = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
|
local = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
|
||||||
|
|
||||||
if (local < 0)
|
if (local < 0)
|
||||||
|
17
pull.c
17
pull.c
@ -8,6 +8,13 @@ int get_tree = 0;
|
|||||||
int get_history = 0;
|
int get_history = 0;
|
||||||
int get_all = 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)
|
static int process_tree(unsigned char *sha1)
|
||||||
{
|
{
|
||||||
struct tree *tree = lookup_tree(sha1);
|
struct tree *tree = lookup_tree(sha1);
|
||||||
@ -17,7 +24,7 @@ static int process_tree(unsigned char *sha1)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for (entries = tree->entries; entries; entries = entries->next) {
|
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;
|
return -1;
|
||||||
if (entries->directory) {
|
if (entries->directory) {
|
||||||
if (process_tree(entries->item.tree->object.sha1))
|
if (process_tree(entries->item.tree->object.sha1))
|
||||||
@ -31,14 +38,14 @@ static int process_commit(unsigned char *sha1)
|
|||||||
{
|
{
|
||||||
struct commit *obj = lookup_commit(sha1);
|
struct commit *obj = lookup_commit(sha1);
|
||||||
|
|
||||||
if (fetch(sha1))
|
if (make_sure_we_have_it(sha1))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (parse_commit(obj))
|
if (parse_commit(obj))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (get_tree) {
|
if (get_tree) {
|
||||||
if (fetch(obj->tree->object.sha1))
|
if (make_sure_we_have_it(obj->tree->object.sha1))
|
||||||
return -1;
|
return -1;
|
||||||
if (process_tree(obj->tree->object.sha1))
|
if (process_tree(obj->tree->object.sha1))
|
||||||
return -1;
|
return -1;
|
||||||
@ -50,7 +57,7 @@ static int process_commit(unsigned char *sha1)
|
|||||||
for (; parents; parents = parents->next) {
|
for (; parents; parents = parents->next) {
|
||||||
if (has_sha1_file(parents->item->object.sha1))
|
if (has_sha1_file(parents->item->object.sha1))
|
||||||
continue;
|
continue;
|
||||||
if (fetch(parents->item->object.sha1)) {
|
if (make_sure_we_have_it(parents->item->object.sha1)) {
|
||||||
/* The server might not have it, and
|
/* The server might not have it, and
|
||||||
* we don't mind.
|
* we don't mind.
|
||||||
*/
|
*/
|
||||||
@ -70,7 +77,7 @@ int pull(char *target)
|
|||||||
retval = get_sha1_hex(target, sha1);
|
retval = get_sha1_hex(target, sha1);
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
retval = fetch(sha1);
|
retval = make_sure_we_have_it(sha1);
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
return process_commit(sha1);
|
return process_commit(sha1);
|
||||||
|
Loading…
Reference in New Issue
Block a user