diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-11-09 11:54:04 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-11-12 22:25:07 -0800 |
commit | 96b8d93a539f3a9f43f0fc38214db8753cac3c2e (patch) | |
tree | 91c26fc5cb2a9bd545e8e22f4db0780f5b0e65a3 /builtin/commit-tree.c | |
parent | 79a9312cc99f9c2f2949e1211c708896e6037f64 (diff) | |
download | git-96b8d93a539f3a9f43f0fc38214db8753cac3c2e.tar.gz git-96b8d93a539f3a9f43f0fc38214db8753cac3c2e.tar.xz |
commit-tree: teach -m/-F options to read logs from elsewhere
Just like "git commit" does.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/commit-tree.c')
-rw-r--r-- | builtin/commit-tree.c | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/builtin/commit-tree.c b/builtin/commit-tree.c index 92cfbafe3..b9c331225 100644 --- a/builtin/commit-tree.c +++ b/builtin/commit-tree.c @@ -9,7 +9,7 @@ #include "builtin.h" #include "utf8.h" -static const char commit_tree_usage[] = "git commit-tree <sha1> [(-p <sha1>)...] < changelog"; +static const char commit_tree_usage[] = "git commit-tree [(-p <sha1>)...] [-m <message>] [-F <file>] <sha1> <changelog"; static void new_parent(struct commit *parent, struct commit_list **parents_p) { @@ -51,6 +51,41 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix) continue; } + if (!strcmp(arg, "-m")) { + if (argc <= ++i) + usage(commit_tree_usage); + if (buffer.len) + strbuf_addch(&buffer, '\n'); + strbuf_addstr(&buffer, argv[i]); + strbuf_complete_line(&buffer); + continue; + } + + if (!strcmp(arg, "-F")) { + int fd; + + if (argc <= ++i) + usage(commit_tree_usage); + if (buffer.len) + strbuf_addch(&buffer, '\n'); + if (!strcmp(argv[i], "-")) + fd = 0; + else { + fd = open(argv[i], O_RDONLY); + if (fd < 0) + die_errno("git commit-tree: failed to open '%s'", + argv[i]); + } + if (strbuf_read(&buffer, fd, 0) < 0) + die_errno("git commit-tree: failed to read '%s'", + argv[i]); + if (fd && close(fd)) + die_errno("git commit-tree: failed to close '%s'", + argv[i]); + strbuf_complete_line(&buffer); + continue; + } + if (get_sha1(arg, tree_sha1)) die("Not a valid object name %s", arg); if (got_tree) @@ -58,8 +93,10 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix) got_tree = 1; } - if (strbuf_read(&buffer, 0, 0) < 0) - die_errno("git commit-tree: failed to read"); + if (!buffer.len) { + if (strbuf_read(&buffer, 0, 0) < 0) + die_errno("git commit-tree: failed to read"); + } if (commit_tree(buffer.buf, tree_sha1, parents, commit_sha1, NULL)) { strbuf_release(&buffer); |