зеркало из https://github.com/microsoft/git.git
[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:
Родитель
9182f89ab2
Коммит
cd541a68b3
|
@ -92,6 +92,11 @@ int fetch(unsigned char *sha1)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fetch_ref(char *ref, unsigned char *sha1)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *commit_id;
|
char *commit_id;
|
||||||
|
|
|
@ -73,6 +73,11 @@ int fetch(unsigned char *sha1)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fetch_ref(char *ref, unsigned char *sha1)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *local_pull_usage =
|
static const char *local_pull_usage =
|
||||||
"git-local-pull [-c] [-t] [-a] [-l] [-s] [-n] [-v] [-d] [--recover] commit-id path";
|
"git-local-pull [-c] [-t] [-a] [-l] [-s] [-n] [-v] [-d] [--recover] commit-id path";
|
||||||
|
|
||||||
|
|
49
pull.c
49
pull.c
|
@ -3,6 +3,11 @@
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
|
#include "refs.h"
|
||||||
|
|
||||||
|
const char *write_ref = NULL;
|
||||||
|
|
||||||
|
const unsigned char *current_ref = NULL;
|
||||||
|
|
||||||
int get_tree = 0;
|
int get_tree = 0;
|
||||||
int get_history = 0;
|
int get_history = 0;
|
||||||
|
@ -110,16 +115,42 @@ static int process_commit(unsigned char *sha1)
|
||||||
return 0;
|
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 pull(char *target)
|
||||||
{
|
{
|
||||||
int retval;
|
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
retval = get_sha1_hex(target, sha1);
|
int fd = -1;
|
||||||
if (retval)
|
|
||||||
return retval;
|
if (write_ref && current_ref) {
|
||||||
retval = make_sure_we_have_it(commitS, sha1);
|
fd = lock_ref_sha1(write_ref, current_ref);
|
||||||
if (retval)
|
if (fd < 0)
|
||||||
return retval;
|
return -1;
|
||||||
memcpy(current_commit_sha1, sha1, 20);
|
}
|
||||||
return process_commit(sha1);
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
8
pull.h
8
pull.h
|
@ -4,6 +4,14 @@
|
||||||
/** To be provided by the particular implementation. **/
|
/** To be provided by the particular implementation. **/
|
||||||
extern int fetch(unsigned char *sha1);
|
extern int fetch(unsigned char *sha1);
|
||||||
|
|
||||||
|
extern int fetch_ref(char *ref, unsigned char *sha1);
|
||||||
|
|
||||||
|
/** If set, the ref filename to write the target value to. **/
|
||||||
|
extern const char *write_ref;
|
||||||
|
|
||||||
|
/** If set, the hash that the current value of write_ref must be. **/
|
||||||
|
extern const unsigned char *current_ref;
|
||||||
|
|
||||||
/** Set to fetch the target tree. */
|
/** Set to fetch the target tree. */
|
||||||
extern int get_tree;
|
extern int get_tree;
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,11 @@ int get_version(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fetch_ref(char *ref, unsigned char *sha1)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *commit_id;
|
char *commit_id;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче