[PATCH] Generic support for pulling refs
This adds support to pull.c for requesting a reference and writing it to a file. All of the git-*-pull programs get stubs for now. Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committed by
Linus Torvalds

parent
9182f89ab2
commit
cd541a68b3
49
pull.c
49
pull.c
@ -3,6 +3,11 @@
|
||||
#include "cache.h"
|
||||
#include "commit.h"
|
||||
#include "tree.h"
|
||||
#include "refs.h"
|
||||
|
||||
const char *write_ref = NULL;
|
||||
|
||||
const unsigned char *current_ref = NULL;
|
||||
|
||||
int get_tree = 0;
|
||||
int get_history = 0;
|
||||
@ -110,16 +115,42 @@ static int process_commit(unsigned char *sha1)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int interpret_target(char *target, unsigned char *sha1)
|
||||
{
|
||||
if (!get_sha1_hex(target, sha1))
|
||||
return 0;
|
||||
if (!check_ref_format(target)) {
|
||||
if (!fetch_ref(target, sha1)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int pull(char *target)
|
||||
{
|
||||
int retval;
|
||||
unsigned char sha1[20];
|
||||
retval = get_sha1_hex(target, sha1);
|
||||
if (retval)
|
||||
return retval;
|
||||
retval = make_sure_we_have_it(commitS, sha1);
|
||||
if (retval)
|
||||
return retval;
|
||||
memcpy(current_commit_sha1, sha1, 20);
|
||||
return process_commit(sha1);
|
||||
int fd = -1;
|
||||
|
||||
if (write_ref && current_ref) {
|
||||
fd = lock_ref_sha1(write_ref, current_ref);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (interpret_target(target, sha1))
|
||||
return error("Could not interpret %s as something to pull",
|
||||
target);
|
||||
if (process_commit(sha1))
|
||||
return -1;
|
||||
|
||||
if (write_ref) {
|
||||
if (current_ref) {
|
||||
write_ref_sha1(write_ref, fd, sha1);
|
||||
} else {
|
||||
write_ref_sha1_unlocked(write_ref, sha1);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user