X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=local-pull.c;h=afdba9f527e2e78fcd62667cd17323e28a8ecb94;hb=f7b797073c2286fff8c4d46842ed00d868f3b2fa;hp=ea38d87dfd4de9b2952ce0465a0374f4681be474;hpb=b02a26cb877319f0367725ce87aead42488714cb;p=git.git diff --git a/local-pull.c b/local-pull.c index ea38d87d..afdba9f5 100644 --- a/local-pull.c +++ b/local-pull.c @@ -1,28 +1,16 @@ /* * Copyright (C) 2005 Junio C Hamano */ -#include -#include -#include -#include #include "cache.h" #include "commit.h" -#include -#include #include "pull.h" static int use_link = 0; static int use_symlink = 0; static int use_filecopy = 1; -static int verbose = 0; static char *path; -static void say(const char *fmt, const char *hex) { - if (verbose) - fprintf(stderr, fmt, hex); -} - int fetch(unsigned char *sha1) { static int object_name_start = -1; @@ -39,12 +27,19 @@ int fetch(unsigned char *sha1) filename[object_name_start+1] = hex[1]; filename[object_name_start+2] = '/'; strcpy(filename + object_name_start + 3, hex + 2); - if (use_link && !link(filename, dest_filename)) { - say("Hardlinked %s.\n", hex); - return 0; + if (use_link) { + if (!link(filename, dest_filename)) { + pull_say("link %s\n", hex); + return 0; + } + /* If we got ENOENT there is no point continuing. */ + if (errno == ENOENT) { + fprintf(stderr, "does not exist %s\n", filename); + return -1; + } } if (use_symlink && !symlink(filename, dest_filename)) { - say("Symlinked %s.\n", hex); + pull_say("symlink %s\n", hex); return 0; } if (use_filecopy) { @@ -54,13 +49,13 @@ int fetch(unsigned char *sha1) ifd = open(filename, O_RDONLY); if (ifd < 0 || fstat(ifd, &st) < 0) { close(ifd); - fprintf(stderr, "Cannot open %s\n", filename); + fprintf(stderr, "cannot open %s\n", filename); return -1; } map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, ifd, 0); close(ifd); if (-1 == (int)(long)map) { - fprintf(stderr, "Cannot mmap %s\n", filename); + fprintf(stderr, "cannot mmap %s\n", filename); return -1; } ofd = open(dest_filename, O_WRONLY | O_CREAT | O_EXCL, 0666); @@ -69,18 +64,17 @@ int fetch(unsigned char *sha1) munmap(map, st.st_size); close(ofd); if (status) - fprintf(stderr, "Cannot write %s (%ld bytes)\n", - dest_filename, st.st_size); + fprintf(stderr, "cannot write %s\n", dest_filename); else - say("Copied %s.\n", hex); + pull_say("copy %s\n", hex); return status; } - fprintf(stderr, "No copy method was provided to copy %s.\n", hex); + fprintf(stderr, "failed to copy %s with given copy methods.\n", hex); return -1; } static const char *local_pull_usage = -"git-local-pull [-c] [-t] [-a] [-l] [-s] [-n] [-v] commit-id path"; +"git-local-pull [-c] [-t] [-a] [-l] [-s] [-n] [-v] [-d] [--recover] commit-id path"; /* * By default we only use file copy. @@ -98,6 +92,10 @@ int main(int argc, char **argv) get_tree = 1; else if (argv[arg][1] == 'c') get_history = 1; + else if (argv[arg][1] == 'd') + get_delta = 0; + else if (!strcmp(argv[arg], "--recover")) + get_delta = 2; else if (argv[arg][1] == 'a') { get_all = 1; get_tree = 1; @@ -110,7 +108,7 @@ int main(int argc, char **argv) else if (argv[arg][1] == 'n') use_filecopy = 0; else if (argv[arg][1] == 'v') - verbose = 1; + get_verbosely = 1; else usage(local_pull_usage); arg++;