Browse Source

[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>
maint
Daniel Barkalow 20 years ago committed by Linus Torvalds
parent
commit
cd541a68b3
  1. 5
      http-pull.c
  2. 5
      local-pull.c
  3. 49
      pull.c
  4. 8
      pull.h
  5. 5
      ssh-pull.c

5
http-pull.c

@ -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;

5
local-pull.c

@ -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

@ -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

@ -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;



5
ssh-pull.c

@ -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;

Loading…
Cancel
Save