summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 07c0732)
raw | patch | inline | side by side (parent: 07c0732)
author | Linus Torvalds <torvalds@linux-foundation.org> | |
Fri, 22 Jan 2010 15:29:21 +0000 (07:29 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Fri, 22 Jan 2010 18:01:21 +0000 (10:01 -0800) |
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile | patch | blob | history | |
builtin-merge-index.c | [new file with mode: 0644] | patch | blob |
builtin.h | patch | blob | history | |
git.c | patch | blob | history | |
merge-index.c | [deleted file] | patch | blob | history |
diff --git a/Makefile b/Makefile
index e1c7ae58500916ac5adbd187029e7edcf8e6663f..70ac4b3e234ed4c421d36efc2987bf4ae6efdc9f 100644 (file)
--- a/Makefile
+++ b/Makefile
PROGRAMS += git-fast-import$X
PROGRAMS += git-imap-send$X
PROGRAMS += git-index-pack$X
-PROGRAMS += git-merge-index$X
PROGRAMS += git-mktag$X
PROGRAMS += git-pack-redundant$X
PROGRAMS += git-shell$X
BUILTIN_OBJS += builtin-merge.o
BUILTIN_OBJS += builtin-merge-base.o
BUILTIN_OBJS += builtin-merge-file.o
+BUILTIN_OBJS += builtin-merge-index.o
BUILTIN_OBJS += builtin-merge-ours.o
BUILTIN_OBJS += builtin-merge-recursive.o
BUILTIN_OBJS += builtin-merge-tree.o
diff --git a/builtin-merge-index.c b/builtin-merge-index.c
--- /dev/null
+++ b/builtin-merge-index.c
@@ -0,0 +1,111 @@
+#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 cmd_merge_index(int argc, const char **argv, const char *prefix)
+{
+ 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>*)");
+
+ 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++) {
+ const 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;
+}
diff --git a/builtin.h b/builtin.h
index cb8489f97e4fba554f5abe97e3a76c615fba602e..e961b334241f2741b4e773f33217c95a9a0f93d3 100644 (file)
--- a/builtin.h
+++ b/builtin.h
extern int cmd_mailsplit(int argc, const char **argv, const char *prefix);
extern int cmd_merge(int argc, const char **argv, const char *prefix);
extern int cmd_merge_base(int argc, const char **argv, const char *prefix);
+extern int cmd_merge_index(int argc, const char **argv, const char *prefix);
extern int cmd_merge_ours(int argc, const char **argv, const char *prefix);
extern int cmd_merge_file(int argc, const char **argv, const char *prefix);
extern int cmd_merge_recursive(int argc, const char **argv, const char *prefix);
index b60999ca9ebdb3582ed8cc790e0722a450bb2e40..eae12e32eafcc6185e783f2be9859126e7aa4a33 100644 (file)
--- a/git.c
+++ b/git.c
{ "merge", cmd_merge, RUN_SETUP | NEED_WORK_TREE },
{ "merge-base", cmd_merge_base, RUN_SETUP },
{ "merge-file", cmd_merge_file },
+ { "merge-index", cmd_merge_index, RUN_SETUP },
{ "merge-ours", cmd_merge_ours, RUN_SETUP },
{ "merge-recursive", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },
{ "merge-recursive-ours", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },
diff --git a/merge-index.c b/merge-index.c
--- 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;
-}