And use struct rewrite.
Signed-off-by: Felipe Contreras <[email protected]>
---
builtin/commit.c | 38 +++++---------------------------------
rewrite.c | 32 ++++++++++++++++++++++++++++++++
rewrite.h | 1 +
3 files changed, 38 insertions(+), 33 deletions(-)
diff --git a/builtin/commit.c b/builtin/commit.c
index 10acc53..7bfe9d0 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -30,6 +30,7 @@
#include "column.h"
#include "sequencer.h"
#include "notes-utils.h"
+#include "rewrite.h"
static const char * const builtin_commit_usage[] = {
N_("git commit [options] [--] <pathspec>..."),
@@ -1386,38 +1387,6 @@ static int git_commit_config(const char *k, const char
*v, void *cb)
return git_status_config(k, v, s);
}
-static int run_rewrite_hook(const unsigned char *oldsha1,
- const unsigned char *newsha1)
-{
- /* oldsha1 SP newsha1 LF NUL */
- static char buf[2*40 + 3];
- struct child_process proc;
- const char *argv[3];
- int code;
- size_t n;
-
- argv[0] = find_hook("post-rewrite");
- if (!argv[0])
- return 0;
-
- argv[1] = "amend";
- argv[2] = NULL;
-
- memset(&proc, 0, sizeof(proc));
- proc.argv = argv;
- proc.in = -1;
- proc.stdout_to_stderr = 1;
-
- code = start_command(&proc);
- if (code)
- return code;
- n = snprintf(buf, sizeof(buf), "%s %s\n",
- sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
- write_in_full(proc.in, buf, n);
- close(proc.in);
- return finish_command(&proc);
-}
-
int cmd_commit(int argc, const char **argv, const char *prefix)
{
static struct wt_status s;
@@ -1653,13 +1622,16 @@ int cmd_commit(int argc, const char **argv, const char
*prefix)
run_hook(get_index_file(), "post-commit", NULL);
if (amend && !no_post_rewrite) {
struct notes_rewrite_cfg *cfg;
+ struct rewritten rewrite;
+ memset(&rewrite, 0, sizeof(rewrite));
cfg = init_copy_notes_for_rewrite("amend");
if (cfg) {
/* we are amending, so current_head is not NULL */
copy_note_for_rewrite(cfg, current_head->object.sha1,
sha1);
finish_copy_notes_for_rewrite(cfg, "Notes added by 'git
commit --amend'");
}
- run_rewrite_hook(current_head->object.sha1, sha1);
+ add_rewritten(&rewrite, current_head->object.sha1, sha1);
+ run_rewrite_hook(&rewrite, "amend");
}
if (!quiet)
print_summary(prefix, sha1, !current_head);
diff --git a/rewrite.c b/rewrite.c
index 2793688..c8efaa8 100644
--- a/rewrite.c
+++ b/rewrite.c
@@ -1,5 +1,6 @@
#include "cache.h"
#include "rewrite.h"
+#include "run-command.h"
void add_rewritten(struct rewritten *list, unsigned char *from, unsigned char
*to)
{
@@ -69,3 +70,34 @@ void load_rewritten(struct rewritten *list, const char *file)
}
strbuf_release(&buf);
}
+
+int run_rewrite_hook(struct rewritten *list, const char *name)
+{
+ struct strbuf buf = STRBUF_INIT;
+ struct child_process proc;
+ const char *argv[3];
+ int code, i;
+
+ argv[0] = find_hook("post-rewrite");
+ if (!argv[0])
+ return 0;
+
+ argv[1] = name;
+ argv[2] = NULL;
+
+ memset(&proc, 0, sizeof(proc));
+ proc.argv = argv;
+ proc.in = -1;
+ proc.stdout_to_stderr = 1;
+
+ code = start_command(&proc);
+ if (code)
+ return code;
+ for (i = 0; i < list->nr; i++) {
+ struct rewritten_item *item = &list->items[i];
+ strbuf_addf(&buf, "%s %s\n", sha1_to_hex(item->from),
sha1_to_hex(item->to));
+ }
+ write_in_full(proc.in, buf.buf, buf.len);
+ close(proc.in);
+ return finish_command(&proc);
+}
diff --git a/rewrite.h b/rewrite.h
index 09e7222..fd00e66 100644
--- a/rewrite.h
+++ b/rewrite.h
@@ -14,5 +14,6 @@ struct rewritten {
void add_rewritten(struct rewritten *list, unsigned char *from, unsigned char
*to);
int store_rewritten(struct rewritten *list, const char *file);
void load_rewritten(struct rewritten *list, const char *file);
+int run_rewrite_hook(struct rewritten *list, const char *name);
#endif
--
1.8.4-fc
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html