diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-01-22 07:29:21 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-22 10:01:21 -0800 |
commit | 0ecace728f8e48b87f81433b053d7f277f22e674 (patch) | |
tree | bb7fba5beef76521154779bc8aa90c0dbe59ddd9 /merge-index.c | |
parent | 07c073206798483c9916d492dfc6faf7400a50ad (diff) | |
download | git-0ecace728f8e48b87f81433b053d7f277f22e674.tar.gz |
make "merge-index" a built-in
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-index.c')
-rw-r--r-- | merge-index.c | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/merge-index.c b/merge-index.c deleted file mode 100644 index 19ddd03e0b..0000000000 --- a/merge-index.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "cache.h" -#include "run-command.h" -#include "exec_cmd.h" - -static const char *pgm; -static int one_shot, quiet; -static int err; - -static int merge_entry(int pos, const char *path) -{ - int found; - const char *arguments[] = { pgm, "", "", "", path, "", "", "", NULL }; - char hexbuf[4][60]; - char ownbuf[4][60]; - - if (pos >= active_nr) - die("git merge-index: %s not in the cache", path); - found = 0; - do { - struct cache_entry *ce = active_cache[pos]; - int stage = ce_stage(ce); - - if (strcmp(ce->name, path)) - break; - found++; - strcpy(hexbuf[stage], sha1_to_hex(ce->sha1)); - sprintf(ownbuf[stage], "%o", ce->ce_mode); - arguments[stage] = hexbuf[stage]; - arguments[stage + 4] = ownbuf[stage]; - } while (++pos < active_nr); - if (!found) - die("git merge-index: %s not in the cache", path); - - if (run_command_v_opt(arguments, 0)) { - if (one_shot) - err++; - else { - if (!quiet) - die("merge program failed"); - exit(1); - } - } - return found; -} - -static void merge_file(const char *path) -{ - int pos = cache_name_pos(path, strlen(path)); - - /* - * If it already exists in the cache as stage0, it's - * already merged and there is nothing to do. - */ - if (pos < 0) - merge_entry(-pos-1, path); -} - -static void merge_all(void) -{ - int i; - for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; - if (!ce_stage(ce)) - continue; - i += merge_entry(i, ce->name)-1; - } -} - -int main(int argc, char **argv) -{ - int i, force_file = 0; - - /* Without this we cannot rely on waitpid() to tell - * what happened to our children. - */ - signal(SIGCHLD, SIG_DFL); - - if (argc < 3) - usage("git merge-index [-o] [-q] <merge-program> (-a | [--] <filename>*)"); - - git_extract_argv0_path(argv[0]); - - setup_git_directory(); - read_cache(); - - i = 1; - if (!strcmp(argv[i], "-o")) { - one_shot = 1; - i++; - } - if (!strcmp(argv[i], "-q")) { - quiet = 1; - i++; - } - pgm = argv[i++]; - for (; i < argc; i++) { - char *arg = argv[i]; - if (!force_file && *arg == '-') { - if (!strcmp(arg, "--")) { - force_file = 1; - continue; - } - if (!strcmp(arg, "-a")) { - merge_all(); - continue; - } - die("git merge-index: unknown option %s", arg); - } - merge_file(arg); - } - if (err && !quiet) - die("merge program failed"); - return err; -} |