* [PATCHv6 0/6] Add commit message options for rebase --autosquash
@ 2010-10-21 19:33 Pat Notz
2010-10-21 19:33 ` [PATCHv6 1/6] commit: helper methods to reduce redundant blocks of code Pat Notz
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
This patch series adds new command line options to git-commit to make
it easy to specify messages for commits correctly formatted for use
wit 'rebase -i --autosquash'.
The first patch introduces minor refactorings that set the stage
for subsequent patches, mostly preventing copy-n-paste coding in what
follows.
The second patch teaches format_commit_message to reencode the content
if the caller's commit object uses an encoding different from the
commit encoding.
The remaining patches add the --fixup and --squash commands to
git-commit including tests of commit, interactions with rebase and
i18n encodings.
One issue which limits the testing (but not the implementation, I
think) is that when 'rebase --autosquash' is comparing commit subject
lines it does not first make sure that the commits use a common
encoding. That's follow-on work.
Pat Notz (6):
commit: helper methods to reduce redundant blocks of code
pretty.c: teach format_commit_message() to reencode the output
commit: --fixup option for use with rebase --autosquash
add tests of commit --fixup
commit: --squash option for use with rebase --autosquash
add tests of commit --squash
Documentation/git-commit.txt | 21 ++++++++--
archive.c | 2 +-
builtin/commit.c | 86 +++++++++++++++++++++++++++--------------
builtin/fmt-merge-msg.c | 2 +-
builtin/log.c | 3 +-
builtin/mailinfo.c | 2 +-
cache.h | 3 +
commit.c | 13 ++++++
commit.h | 6 ++-
environment.c | 11 +++++
log-tree.c | 2 +-
notes-cache.c | 2 +-
pretty.c | 39 ++++++++++++-------
submodule.c | 4 +-
t/t3415-rebase-autosquash.sh | 29 +++++++++++++-
t/t3900-i18n-commit.sh | 29 ++++++++++++++
t/t7500-commit.sh | 80 +++++++++++++++++++++++++++++++++++++++
t/t7500/edit-content | 4 ++
18 files changed, 277 insertions(+), 61 deletions(-)
create mode 100755 t/t7500/edit-content
--
1.7.3.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCHv6 1/6] commit: helper methods to reduce redundant blocks of code
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
@ 2010-10-21 19:33 ` Pat Notz
2010-10-21 19:33 ` [PATCHv6 2/6] pretty.c: teach format_commit_message() to reencode the output Pat Notz
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
* builtin/commit.c: Replace block of code with a one-liner call to
logmsg_reencode().
* commit.c: new function for looking up a comit by name
* pretty.c: helper methods for getting output encodings
Add helpers get_log_output_encoding() and
get_commit_output_encoding() that eliminate some messy and duplicate
if-blocks.
Signed-off-by: Pat Notz <patnotz@gmail.com>
---
builtin/commit.c | 26 ++++----------------------
builtin/log.c | 3 +--
builtin/mailinfo.c | 2 +-
cache.h | 3 +++
commit.c | 13 +++++++++++++
commit.h | 1 +
environment.c | 11 +++++++++++
pretty.c | 9 ++-------
8 files changed, 36 insertions(+), 32 deletions(-)
diff --git a/builtin/commit.c b/builtin/commit.c
index 66fdd22..54fcc6d 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -896,30 +896,14 @@ static int parse_and_validate_options(int argc, const char *argv[],
if (!use_message && renew_authorship)
die("--reset-author can be used only with -C, -c or --amend.");
if (use_message) {
- unsigned char sha1[20];
- static char utf8[] = "UTF-8";
const char *out_enc;
- char *enc, *end;
struct commit *commit;
- if (get_sha1(use_message, sha1))
+ commit = lookup_commit_reference_by_name(use_message);
+ if (!commit)
die("could not lookup commit %s", use_message);
- commit = lookup_commit_reference(sha1);
- if (!commit || parse_commit(commit))
- die("could not parse commit %s", use_message);
-
- enc = strstr(commit->buffer, "\nencoding");
- if (enc) {
- end = strchr(enc + 10, '\n');
- enc = xstrndup(enc + 10, end - (enc + 10));
- } else {
- enc = utf8;
- }
- out_enc = git_commit_encoding ? git_commit_encoding : utf8;
-
- if (strcmp(out_enc, enc))
- use_message_buffer =
- reencode_string(commit->buffer, out_enc, enc);
+ out_enc = get_commit_output_encoding();
+ use_message_buffer = logmsg_reencode(commit, out_enc);
/*
* If we failed to reencode the buffer, just copy it
@@ -929,8 +913,6 @@ static int parse_and_validate_options(int argc, const char *argv[],
*/
if (use_message_buffer == NULL)
use_message_buffer = xstrdup(commit->buffer);
- if (enc != utf8)
- free(enc);
}
if (!!also + !!only + !!all + !!interactive > 1)
diff --git a/builtin/log.c b/builtin/log.c
index 22d1290..90e05ac 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -329,8 +329,7 @@ static void show_tagger(char *buf, int len, struct rev_info *rev)
struct strbuf out = STRBUF_INIT;
pp_user_info("Tagger", rev->commit_format, &out, buf, rev->date_mode,
- git_log_output_encoding ?
- git_log_output_encoding: git_commit_encoding);
+ get_log_output_encoding());
printf("%s", out.buf);
strbuf_release(&out);
}
diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index 2320d98..71e6262 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -1032,7 +1032,7 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
*/
git_config(git_mailinfo_config, NULL);
- def_charset = (git_commit_encoding ? git_commit_encoding : "UTF-8");
+ def_charset = get_commit_output_encoding();
metainfo_charset = def_charset;
while (1 < argc && argv[1][0] == '-') {
diff --git a/cache.h b/cache.h
index 33decd9..5ed5374 100644
--- a/cache.h
+++ b/cache.h
@@ -1003,6 +1003,9 @@ extern int git_env_bool(const char *, int);
extern int git_config_system(void);
extern int git_config_global(void);
extern int config_error_nonbool(const char *);
+extern const char *get_log_output_encoding(void);
+extern const char *get_commit_output_encoding(void);
+
extern const char *config_exclusive_filename;
#define MAX_GITNAME (1000)
diff --git a/commit.c b/commit.c
index 0094ec1..5ed9ccd 100644
--- a/commit.c
+++ b/commit.c
@@ -49,6 +49,19 @@ struct commit *lookup_commit(const unsigned char *sha1)
return check_commit(obj, sha1, 0);
}
+struct commit *lookup_commit_reference_by_name(const char *name)
+{
+ unsigned char sha1[20];
+ struct commit *commit;
+
+ if (get_sha1(name, sha1))
+ return NULL;
+ commit = lookup_commit_reference(sha1);
+ if (!commit || parse_commit(commit))
+ return NULL;
+ return commit;
+}
+
static unsigned long parse_commit_date(const char *buf, const char *tail)
{
const char *dateptr;
diff --git a/commit.h b/commit.h
index 9113bbe..a0b710f 100644
--- a/commit.h
+++ b/commit.h
@@ -36,6 +36,7 @@ struct commit *lookup_commit(const unsigned char *sha1);
struct commit *lookup_commit_reference(const unsigned char *sha1);
struct commit *lookup_commit_reference_gently(const unsigned char *sha1,
int quiet);
+struct commit *lookup_commit_reference_by_name(const char *name);
int parse_commit_buffer(struct commit *item, void *buffer, unsigned long size);
diff --git a/environment.c b/environment.c
index de5581f..a9d44a2 100644
--- a/environment.c
+++ b/environment.c
@@ -192,3 +192,14 @@ int set_git_dir(const char *path)
setup_git_env();
return 0;
}
+
+const char *get_log_output_encoding(void)
+{
+ return git_log_output_encoding ? git_log_output_encoding
+ : get_commit_output_encoding();
+}
+
+const char *get_commit_output_encoding(void)
+{
+ return git_commit_encoding ? git_commit_encoding : "UTF-8";
+}
diff --git a/pretty.c b/pretty.c
index f85444b..c253172 100644
--- a/pretty.c
+++ b/pretty.c
@@ -886,8 +886,7 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder,
case 'N':
if (c->pretty_ctx->show_notes) {
format_display_notes(commit->object.sha1, sb,
- git_log_output_encoding ? git_log_output_encoding
- : git_commit_encoding, 0);
+ get_log_output_encoding(), 0);
return 1;
}
return 0;
@@ -1159,11 +1158,7 @@ char *reencode_commit_message(const struct commit *commit, const char **encoding
{
const char *encoding;
- encoding = (git_log_output_encoding
- ? git_log_output_encoding
- : git_commit_encoding);
- if (!encoding)
- encoding = "UTF-8";
+ encoding = get_log_output_encoding();
if (encoding_p)
*encoding_p = encoding;
return logmsg_reencode(commit, encoding);
--
1.7.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv6 2/6] pretty.c: teach format_commit_message() to reencode the output
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
2010-10-21 19:33 ` [PATCHv6 1/6] commit: helper methods to reduce redundant blocks of code Pat Notz
@ 2010-10-21 19:33 ` Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 3/6] commit: --fixup option for use with rebase --autosquash Pat Notz
` (3 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
format_commit_message() will now reencode the content if the desired
output encoding is different from the encoding in the passed in
commit.
Signed-off-by: Pat Notz <patnotz@gmail.com>
---
archive.c | 2 +-
builtin/commit.c | 8 +++++---
builtin/fmt-merge-msg.c | 2 +-
commit.h | 5 ++++-
log-tree.c | 2 +-
notes-cache.c | 2 +-
pretty.c | 30 ++++++++++++++++++++++--------
submodule.c | 4 ++--
8 files changed, 37 insertions(+), 18 deletions(-)
diff --git a/archive.c b/archive.c
index edd6853..42b7ab1 100644
--- a/archive.c
+++ b/archive.c
@@ -51,7 +51,7 @@ static void format_subst(const struct commit *commit,
strbuf_add(&fmt, b + 8, c - b - 8);
strbuf_add(buf, src, b - src);
- format_commit_message(commit, fmt.buf, buf, &ctx);
+ format_commit_message(commit, fmt.buf, buf, &ctx, NULL);
len -= c + 1 - src;
src = c + 1;
}
diff --git a/builtin/commit.c b/builtin/commit.c
index 54fcc6d..5fa24f5 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -826,7 +826,7 @@ static const char *find_author_by_nickname(const char *name)
struct pretty_print_context ctx = {0};
ctx.date_mode = DATE_NORMAL;
strbuf_release(&buf);
- format_commit_message(commit, "%an <%ae>", &buf, &ctx);
+ format_commit_message(commit, "%an <%ae>", &buf, &ctx, NULL);
return strbuf_detach(&buf, NULL);
}
die("No existing author found with '%s'", name);
@@ -1127,8 +1127,10 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
strbuf_addstr(&format, "format:%h] %s");
- format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
- format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
+ format_commit_message(commit, "%an <%ae>", &author_ident,
+ &pctx, NULL);
+ format_commit_message(commit, "%cn <%ce>", &committer_ident,
+ &pctx, NULL);
if (strbuf_cmp(&author_ident, &committer_ident)) {
strbuf_addstr(&format, "\n Author: ");
strbuf_addbuf_percentquote(&format, &author_ident);
diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c
index 78c7774..7619f4f 100644
--- a/builtin/fmt-merge-msg.c
+++ b/builtin/fmt-merge-msg.c
@@ -173,7 +173,7 @@ static void shortlog(const char *name, unsigned char *sha1,
if (subjects.nr > limit)
continue;
- format_commit_message(commit, "%s", &sb, &ctx);
+ format_commit_message(commit, "%s", &sb, &ctx, NULL);
strbuf_ltrim(&sb);
if (!sb.len)
diff --git a/commit.h b/commit.h
index a0b710f..b0f7d39 100644
--- a/commit.h
+++ b/commit.h
@@ -85,13 +85,16 @@ struct userformat_want {
extern int has_non_ascii(const char *text);
struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
+extern char *logmsg_reencode(const struct commit *commit,
+ const char *output_encoding);
extern char *reencode_commit_message(const struct commit *commit,
const char **encoding_p);
extern void get_commit_format(const char *arg, struct rev_info *);
extern void userformat_find_requirements(const char *fmt, struct userformat_want *w);
extern void format_commit_message(const struct commit *commit,
const char *format, struct strbuf *sb,
- const struct pretty_print_context *context);
+ const struct pretty_print_context *context,
+ const char *output_encoding);
extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
struct strbuf *sb,
const struct pretty_print_context *context);
diff --git a/log-tree.c b/log-tree.c
index b46ed3b..af3200d 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -274,7 +274,7 @@ void get_patch_filename(struct commit *commit, int nr, const char *suffix,
struct pretty_print_context ctx = {0};
ctx.date_mode = DATE_NORMAL;
- format_commit_message(commit, "%f", buf, &ctx);
+ format_commit_message(commit, "%f", buf, &ctx, NULL);
if (max_len < buf->len)
strbuf_setlen(buf, max_len);
strbuf_addstr(buf, suffix);
diff --git a/notes-cache.c b/notes-cache.c
index dee6d62..461c474 100644
--- a/notes-cache.c
+++ b/notes-cache.c
@@ -19,7 +19,7 @@ static int notes_cache_match_validity(const char *ref, const char *validity)
return 0;
memset(&pretty_ctx, 0, sizeof(pretty_ctx));
- format_commit_message(commit, "%s", &msg, &pretty_ctx);
+ format_commit_message(commit, "%s", &msg, &pretty_ctx, NULL);
strbuf_trim(&msg);
ret = !strcmp(msg.buf, validity);
diff --git a/pretty.c b/pretty.c
index c253172..7f52aa4 100644
--- a/pretty.c
+++ b/pretty.c
@@ -403,8 +403,8 @@ static char *replace_encoding_header(char *buf, const char *encoding)
return strbuf_detach(&tmp, NULL);
}
-static char *logmsg_reencode(const struct commit *commit,
- const char *output_encoding)
+char *logmsg_reencode(const struct commit *commit,
+ const char *output_encoding)
{
static const char *utf8 = "UTF-8";
const char *use_encoding;
@@ -555,6 +555,7 @@ struct format_commit_context {
const struct pretty_print_context *pretty_ctx;
unsigned commit_header_parsed:1;
unsigned commit_message_parsed:1;
+ char *message;
size_t width, indent1, indent2;
/* These offsets are relative to the start of the commit message. */
@@ -591,7 +592,7 @@ static int add_again(struct strbuf *sb, struct chunk *chunk)
static void parse_commit_header(struct format_commit_context *context)
{
- const char *msg = context->commit->buffer;
+ const char *msg = context->message;
int i;
for (i = 0; msg[i]; i++) {
@@ -677,8 +678,8 @@ const char *format_subject(struct strbuf *sb, const char *msg,
static void parse_commit_message(struct format_commit_context *c)
{
- const char *msg = c->commit->buffer + c->message_off;
- const char *start = c->commit->buffer;
+ const char *msg = c->message + c->message_off;
+ const char *start = c->message;
msg = skip_empty_lines(msg);
c->subject_off = msg - start;
@@ -741,7 +742,7 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder,
{
struct format_commit_context *c = context;
const struct commit *commit = c->commit;
- const char *msg = commit->buffer;
+ const char *msg = c->message;
struct commit_list *p;
int h1, h2;
@@ -1008,16 +1009,29 @@ void userformat_find_requirements(const char *fmt, struct userformat_want *w)
void format_commit_message(const struct commit *commit,
const char *format, struct strbuf *sb,
- const struct pretty_print_context *pretty_ctx)
+ const struct pretty_print_context *pretty_ctx,
+ const char *output_encoding)
{
struct format_commit_context context;
+ static char utf8[] = "UTF-8";
+ char *enc;
+
+ enc = get_header(commit, "encoding");
+ enc = enc ? enc : utf8;
memset(&context, 0, sizeof(context));
context.commit = commit;
context.pretty_ctx = pretty_ctx;
context.wrap_start = sb->len;
+ if (output_encoding && strcmp(enc, output_encoding))
+ context.message = logmsg_reencode(commit, output_encoding);
+ context.message = context.message ? context.message : commit->buffer;
+
strbuf_expand(sb, format, format_commit_item, &context);
rewrap_message_tail(sb, &context, 0, 0, 0);
+
+ if (context.message != commit->buffer)
+ free(context.message);
}
static void pp_header(enum cmit_fmt fmt,
@@ -1176,7 +1190,7 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
int need_8bit_cte = context->need_8bit_cte;
if (fmt == CMIT_FMT_USERFORMAT) {
- format_commit_message(commit, user_format, sb, context);
+ format_commit_message(commit, user_format, sb, context, NULL);
return;
}
diff --git a/submodule.c b/submodule.c
index 91a4758..c108ff6 100644
--- a/submodule.c
+++ b/submodule.c
@@ -217,7 +217,7 @@ void show_submodule_summary(FILE *f, const char *path,
}
else if (add)
strbuf_addstr(&sb, add);
- format_commit_message(commit, format, &sb, &ctx);
+ format_commit_message(commit, format, &sb, &ctx, NULL);
if (reset)
strbuf_addstr(&sb, reset);
strbuf_addch(&sb, '\n');
@@ -362,7 +362,7 @@ static void print_commit(struct commit *commit)
struct strbuf sb = STRBUF_INIT;
struct pretty_print_context ctx = {0};
ctx.date_mode = DATE_NORMAL;
- format_commit_message(commit, " %h: %m %s", &sb, &ctx);
+ format_commit_message(commit, " %h: %m %s", &sb, &ctx, NULL);
fprintf(stderr, "%s\n", sb.buf);
strbuf_release(&sb);
}
--
1.7.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv6 3/6] commit: --fixup option for use with rebase --autosquash
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
2010-10-21 19:33 ` [PATCHv6 1/6] commit: helper methods to reduce redundant blocks of code Pat Notz
2010-10-21 19:33 ` [PATCHv6 2/6] pretty.c: teach format_commit_message() to reencode the output Pat Notz
@ 2010-10-21 19:33 ` Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 4/6] add tests of commit --fixup Pat Notz
` (2 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
This option makes it convenient to construct commit messages for use
with 'rebase --autosquash'. The resulting commit message will be
"fixup! ..." where "..." is the subject line of the specified commit
message.
Example usage:
$ git commit --fixup HEAD~2
Signed-off-by: Pat Notz <patnotz@gmail.com>
---
Documentation/git-commit.txt | 14 ++++++++++----
builtin/commit.c | 21 +++++++++++++++++----
2 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 42fb1f5..f4a2b8c 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -9,10 +9,10 @@ SYNOPSIS
--------
[verse]
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
- [(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author]
- [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
- [--date=<date>] [--cleanup=<mode>] [--status | --no-status] [--]
- [[-i | -o ]<file>...]
+ [(-c | -C | --fixup) <commit>] [-F <file> | -m <msg>]
+ [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify]
+ [-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>]
+ [--status | --no-status] [--] [[-i | -o ]<file>...]
DESCRIPTION
-----------
@@ -70,6 +70,12 @@ OPTIONS
Like '-C', but with '-c' the editor is invoked, so that
the user can further edit the commit message.
+--fixup=<commit>::
+ Construct a commit message for use with `rebase --autosquash`.
+ The commit message will be the subject line from the specified
+ commit with a prefix of "fixup! ". See linkgit:git-rebase[1]
+ for details.
+
--reset-author::
When used with -C/-c/--amend options, declare that the
authorship of the resulting commit now belongs of the committer.
diff --git a/builtin/commit.c b/builtin/commit.c
index 5fa24f5..c82108c 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -69,6 +69,7 @@ static enum {
static const char *logfile, *force_author;
static const char *template_file;
static char *edit_message, *use_message;
+static char *fixup_message;
static char *author_name, *author_email, *author_date;
static int all, edit_flag, also, interactive, only, amend, signoff;
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
@@ -124,6 +125,7 @@ static struct option builtin_commit_options[] = {
OPT_CALLBACK('m', "message", &message, "MESSAGE", "specify commit message", opt_parse_m),
OPT_STRING('c', "reedit-message", &edit_message, "COMMIT", "reuse and edit message from specified commit"),
OPT_STRING('C', "reuse-message", &use_message, "COMMIT", "reuse message from specified commit"),
+ OPT_STRING(0, "fixup", &fixup_message, "COMMIT", "use autosquash formatted message to fixup specified commit"),
OPT_BOOLEAN(0, "reset-author", &renew_authorship, "the commit is authored by me now (used with -C-c/--amend)"),
OPT_BOOLEAN('s', "signoff", &signoff, "add Signed-off-by:"),
OPT_FILENAME('t', "template", &template_file, "use specified template file"),
@@ -586,6 +588,15 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
strbuf_add(&sb, buffer + 2, strlen(buffer + 2));
hook_arg1 = "commit";
hook_arg2 = use_message;
+ } else if (fixup_message) {
+ struct pretty_print_context ctx = {0};
+ struct commit *commit;
+ const char *out_enc;
+ commit = lookup_commit_reference_by_name(fixup_message);
+ out_enc = get_commit_output_encoding();
+ format_commit_message(commit, "fixup! %s\n\n",
+ &sb, &ctx, out_enc);
+ hook_arg1 = "message";
} else if (!stat(git_path("MERGE_MSG"), &statbuf)) {
if (strbuf_read_file(&sb, git_path("MERGE_MSG"), 0) < 0)
die_errno("could not read MERGE_MSG");
@@ -863,7 +874,7 @@ static int parse_and_validate_options(int argc, const char *argv[],
if (force_author && renew_authorship)
die("Using both --reset-author and --author does not make sense");
- if (logfile || message.len || use_message)
+ if (logfile || message.len || use_message || fixup_message)
use_editor = 0;
if (edit_flag)
use_editor = 1;
@@ -883,15 +894,17 @@ static int parse_and_validate_options(int argc, const char *argv[],
f++;
if (edit_message)
f++;
+ if (fixup_message)
+ f++;
if (logfile)
f++;
if (f > 1)
- die("Only one of -c/-C/-F can be used.");
+ die("Only one of -c/-C/-F/--fixup can be used.");
if (message.len && f > 0)
- die("Option -m cannot be combined with -c/-C/-F.");
+ die("Option -m cannot be combined with -c/-C/-F/--fixup.");
if (edit_message)
use_message = edit_message;
- if (amend && !use_message)
+ if (amend && !use_message && !fixup_message)
use_message = "HEAD";
if (!use_message && renew_authorship)
die("--reset-author can be used only with -C, -c or --amend.");
--
1.7.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv6 4/6] add tests of commit --fixup
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
` (2 preceding siblings ...)
2010-10-21 19:33 ` [PATCHv6 3/6] commit: --fixup option for use with rebase --autosquash Pat Notz
@ 2010-10-21 19:33 ` Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 5/6] commit: --squash option for use with rebase --autosquash Pat Notz
2010-10-21 19:33 ` [PATCHv6 6/6] add tests of commit --squash Pat Notz
5 siblings, 1 reply; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
t7500: test expected behavior of commit --fixup
t3415: test interaction of commit --fixup with rebase --autosquash
t3900: test commit --fixup with i18n encodings
Signed-off-by: Pat Notz <patnotz@gmail.com>
---
t/t3415-rebase-autosquash.sh | 25 +++++++++++++++++++++++--
t/t3900-i18n-commit.sh | 27 +++++++++++++++++++++++++++
t/t7500-commit.sh | 33 +++++++++++++++++++++++++++++++++
3 files changed, 83 insertions(+), 2 deletions(-)
diff --git a/t/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh
index fd2184c..b77a413 100755
--- a/t/t3415-rebase-autosquash.sh
+++ b/t/t3415-rebase-autosquash.sh
@@ -14,6 +14,7 @@ test_expect_success setup '
git add . &&
test_tick &&
git commit -m "first commit" &&
+ git tag first-commit &&
echo 3 >file3 &&
git add . &&
test_tick &&
@@ -21,7 +22,7 @@ test_expect_success setup '
git tag base
'
-test_auto_fixup() {
+test_auto_fixup () {
git reset --hard base &&
echo 1 >file1 &&
git add -u &&
@@ -50,7 +51,7 @@ test_expect_success 'auto fixup (config)' '
test_must_fail test_auto_fixup final-fixup-config-false
'
-test_auto_squash() {
+test_auto_squash () {
git reset --hard base &&
echo 1 >file1 &&
git add -u &&
@@ -94,4 +95,24 @@ test_expect_success 'misspelled auto squash' '
test 0 = $(git rev-list final-missquash...HEAD | wc -l)
'
+test_auto_commit_flags () {
+ git reset --hard base &&
+ echo 1 >file1 &&
+ git add -u &&
+ test_tick &&
+ git commit --$1 first-commit &&
+ git tag final-commit-$1 &&
+ test_tick &&
+ git rebase --autosquash -i HEAD^^^ &&
+ git log --oneline >actual &&
+ test 3 = $(wc -l <actual) &&
+ git diff --exit-code final-commit-$1 &&
+ test 1 = "$(git cat-file blob HEAD^:file1)" &&
+ test $2 = $(git cat-file commit HEAD^ | grep first | wc -l)
+}
+
+test_expect_success 'use commit --fixup' '
+ test_auto_commit_flags fixup 1
+'
+
test_done
diff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh
index 256c4c9..f9a26c8 100755
--- a/t/t3900-i18n-commit.sh
+++ b/t/t3900-i18n-commit.sh
@@ -133,4 +133,31 @@ do
'
done
+test_commit_autosquash_flags () {
+ H=$1
+ flag=$2
+ test_expect_success "commit --$flag with $H encoding" '
+ git config i18n.commitencoding $H &&
+ git checkout -b $H-$flag C0 &&
+ echo $H >>F &&
+ git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
+ test_tick &&
+ echo intermediate stuff >>G &&
+ git add G &&
+ git commit -a -m "intermediate commit" &&
+ test_tick &&
+ echo $H $flag >>F &&
+ git commit -a --$flag HEAD~1 $3 &&
+ E=$(git cat-file commit '$H-$flag' | \
+ sed -ne "s/^encoding //p") &&
+ test "z$E" = "z'$H'" &&
+ git config --unset-all i18n.commitencoding &&
+ git rebase --autosquash -i HEAD^^^ &&
+ git log --oneline >actual &&
+ test 3 = $(wc -l <actual)
+ '
+}
+
+test_commit_autosquash_flags eucJP fixup
+
test_done
diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh
index aa9c577..a41b819 100755
--- a/t/t7500-commit.sh
+++ b/t/t7500-commit.sh
@@ -215,4 +215,37 @@ test_expect_success 'Commit a message with --allow-empty-message' '
commit_msg_is "hello there"
'
+commit_for_rebase_autosquash_setup () {
+ echo "first content line" >>foo &&
+ git add foo &&
+ cat >log <<EOF &&
+target message subject line
+
+target message body line 1
+target message body line 2
+EOF
+ git commit -F log &&
+ echo "second content line" >>foo &&
+ git add foo &&
+ git commit -m "intermediate commit" &&
+ echo "third content line" >>foo &&
+ git add foo
+}
+
+test_expect_success 'commit --fixup provides correct one-line commit message' '
+ commit_for_rebase_autosquash_setup &&
+ git commit --fixup HEAD~1 &&
+ commit_msg_is "fixup! target message subject line"
+'
+
+test_expect_success 'invalid message options when using --fixup' '
+ echo changes >>foo &&
+ echo "message" >log &&
+ git add foo &&
+ test_must_fail git commit --fixup HEAD~1 -C HEAD~2 &&
+ test_must_fail git commit --fixup HEAD~1 -c HEAD~2 &&
+ test_must_fail git commit --fixup HEAD~1 -m "cmdline message" &&
+ test_must_fail git commit --fixup HEAD~1 -F log
+'
+
test_done
--
1.7.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv6 5/6] commit: --squash option for use with rebase --autosquash
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
` (3 preceding siblings ...)
2010-10-21 19:33 ` [PATCHv6 4/6] add tests of commit --fixup Pat Notz
@ 2010-10-21 19:33 ` Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 6/6] add tests of commit --squash Pat Notz
5 siblings, 1 reply; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
This option makes it convenient to construct commit messages for use
with 'rebase --autosquash'. The resulting commit message will be
"squash! ..." where "..." is the subject line of the specified commit
message. This option can be used with other commit message options
such as -m, -c, -C and -F.
If an editor is invoked (as with -c or -eF or no message options) the
commit message is seeded with the correctly formatted subject line.
Example usage:
$ git commit --squash HEAD~2
$ git commit --squash HEAD~2 -m "clever comment"
$ git commit --squash HEAD~2 -F msgfile
$ git commit --squash HEAD~2 -C deadbeef
Signed-off-by: Pat Notz <patnotz@gmail.com>
---
Documentation/git-commit.txt | 9 ++++++++-
builtin/commit.c | 33 +++++++++++++++++++++++++++++++--
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index f4a2b8c..6e4c220 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -9,7 +9,7 @@ SYNOPSIS
--------
[verse]
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
- [(-c | -C | --fixup) <commit>] [-F <file> | -m <msg>]
+ [(-c | -C | --fixup | --squash) <commit>] [-F <file> | -m <msg>]
[--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify]
[-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>]
[--status | --no-status] [--] [[-i | -o ]<file>...]
@@ -76,6 +76,13 @@ OPTIONS
commit with a prefix of "fixup! ". See linkgit:git-rebase[1]
for details.
+--squash=<commit>::
+ Construct a commit message for use with `rebase --autosquash`.
+ The commit message subject line is taken from the specified
+ commit with a prefix of "squash! ". Can be used with additional
+ commit message options (`-m`/`-c`/`-C`/`-F`). See
+ linkgit:git-rebase[1] for details.
+
--reset-author::
When used with -C/-c/--amend options, declare that the
authorship of the resulting commit now belongs of the committer.
diff --git a/builtin/commit.c b/builtin/commit.c
index c82108c..0608b76 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -69,7 +69,7 @@ static enum {
static const char *logfile, *force_author;
static const char *template_file;
static char *edit_message, *use_message;
-static char *fixup_message;
+static char *fixup_message, *squash_message;
static char *author_name, *author_email, *author_date;
static int all, edit_flag, also, interactive, only, amend, signoff;
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
@@ -126,6 +126,7 @@ static struct option builtin_commit_options[] = {
OPT_STRING('c', "reedit-message", &edit_message, "COMMIT", "reuse and edit message from specified commit"),
OPT_STRING('C', "reuse-message", &use_message, "COMMIT", "reuse message from specified commit"),
OPT_STRING(0, "fixup", &fixup_message, "COMMIT", "use autosquash formatted message to fixup specified commit"),
+ OPT_STRING(0, "squash", &squash_message, "COMMIT", "use autosquash formatted message to squash specified commit"),
OPT_BOOLEAN(0, "reset-author", &renew_authorship, "the commit is authored by me now (used with -C-c/--amend)"),
OPT_BOOLEAN('s', "signoff", &signoff, "add Signed-off-by:"),
OPT_FILENAME('t', "template", &template_file, "use specified template file"),
@@ -567,6 +568,23 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
if (!no_verify && run_hook(index_file, "pre-commit", NULL))
return 0;
+ if (squash_message) {
+ /*
+ * Insert the proper subject line before other commit
+ * message options add their content.
+ */
+ struct pretty_print_context ctx = {0};
+ struct commit *commit;
+ const char *out_enc;
+ commit = lookup_commit_reference_by_name(squash_message);
+ out_enc = get_commit_output_encoding();
+ if (use_message && !strcmp(use_message, squash_message))
+ strbuf_addstr(&sb, "squash! ");
+ else
+ format_commit_message(commit, "squash! %s\n\n", &sb,
+ &ctx, out_enc);
+ }
+
if (message.len) {
strbuf_addbuf(&sb, &message);
hook_arg1 = "message";
@@ -618,6 +636,16 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
else if (in_merge)
hook_arg1 = "merge";
+ if (squash_message) {
+ /*
+ * If squash_commit was used for the commit subject,
+ * then we're possibly hijacking other commit log options.
+ * Reset the hook args to tell the real story.
+ */
+ hook_arg1 = "message";
+ hook_arg2 = "";
+ }
+
fp = fopen(git_path(commit_editmsg), "w");
if (fp == NULL)
die_errno("could not open '%s'", git_path(commit_editmsg));
@@ -889,7 +917,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
die("You have nothing to amend.");
if (amend && in_merge)
die("You are in the middle of a merge -- cannot amend.");
-
+ if (fixup_message && squash_message)
+ die("Options --squash and --fixup cannot be used together");
if (use_message)
f++;
if (edit_message)
--
1.7.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv6 6/6] add tests of commit --squash
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
` (4 preceding siblings ...)
2010-10-21 19:33 ` [PATCHv6 5/6] commit: --squash option for use with rebase --autosquash Pat Notz
@ 2010-10-21 19:33 ` Pat Notz
5 siblings, 0 replies; 11+ messages in thread
From: Pat Notz @ 2010-10-21 19:33 UTC (permalink / raw)
To: git
t7500: test expected behavior of commit --squash
t3415: test interaction of commit --squash with rebase --autosquash
t3900: test commit --squash with i18n encodings
Signed-off-by: Pat Notz <patnotz@gmail.com>
---
t/t3415-rebase-autosquash.sh | 4 +++
t/t3900-i18n-commit.sh | 2 +
t/t7500-commit.sh | 47 ++++++++++++++++++++++++++++++++++++++++++
t/t7500/edit-content | 4 +++
4 files changed, 57 insertions(+), 0 deletions(-)
create mode 100755 t/t7500/edit-content
diff --git a/t/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh
index b77a413..0028533 100755
--- a/t/t3415-rebase-autosquash.sh
+++ b/t/t3415-rebase-autosquash.sh
@@ -115,4 +115,8 @@ test_expect_success 'use commit --fixup' '
test_auto_commit_flags fixup 1
'
+test_expect_success 'use commit --squash' '
+ test_auto_commit_flags squash 2
+'
+
test_done
diff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh
index f9a26c8..888758c 100755
--- a/t/t3900-i18n-commit.sh
+++ b/t/t3900-i18n-commit.sh
@@ -160,4 +160,6 @@ test_commit_autosquash_flags () {
test_commit_autosquash_flags eucJP fixup
+test_commit_autosquash_flags ISO-2022-JP squash '-m "squash message"'
+
test_done
diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh
index a41b819..162527c 100755
--- a/t/t7500-commit.sh
+++ b/t/t7500-commit.sh
@@ -238,10 +238,57 @@ test_expect_success 'commit --fixup provides correct one-line commit message' '
commit_msg_is "fixup! target message subject line"
'
+test_expect_success 'commit --squash works with -F' '
+ commit_for_rebase_autosquash_setup &&
+ echo "log message from file" >msgfile &&
+ git commit --squash HEAD~1 -F msgfile &&
+ commit_msg_is "squash! target message subject linelog message from file"
+'
+
+test_expect_success 'commit --squash works with -m' '
+ commit_for_rebase_autosquash_setup &&
+ git commit --squash HEAD~1 -m "foo bar\nbaz" &&
+ commit_msg_is "squash! target message subject linefoo bar\nbaz"
+'
+
+test_expect_success 'commit --squash works with -C' '
+ commit_for_rebase_autosquash_setup &&
+ git commit --squash HEAD~1 -C HEAD &&
+ commit_msg_is "squash! target message subject lineintermediate commit"
+'
+
+test_expect_success 'commit --squash works with -c' '
+ commit_for_rebase_autosquash_setup &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&
+ git commit --squash HEAD~1 -c HEAD &&
+ commit_msg_is "squash! target message subject lineedited commit"
+'
+
+test_expect_success 'commit --squash works with -C for same commit' '
+ commit_for_rebase_autosquash_setup &&
+ git commit --squash HEAD -C HEAD &&
+ commit_msg_is "squash! intermediate commit"
+'
+
+test_expect_success 'commit --squash works with -c for same commit' '
+ commit_for_rebase_autosquash_setup &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&
+ git commit --squash HEAD -c HEAD &&
+ commit_msg_is "squash! edited commit"
+'
+
+test_expect_success 'commit --squash works with editor' '
+ commit_for_rebase_autosquash_setup &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
+ git commit --squash HEAD~1 &&
+ commit_msg_is "squash! target message subject linecommit message"
+'
+
test_expect_success 'invalid message options when using --fixup' '
echo changes >>foo &&
echo "message" >log &&
git add foo &&
+ test_must_fail git commit --fixup HEAD~1 --squash HEAD~2 &&
test_must_fail git commit --fixup HEAD~1 -C HEAD~2 &&
test_must_fail git commit --fixup HEAD~1 -c HEAD~2 &&
test_must_fail git commit --fixup HEAD~1 -m "cmdline message" &&
diff --git a/t/t7500/edit-content b/t/t7500/edit-content
new file mode 100755
index 0000000..08db9fd
--- /dev/null
+++ b/t/t7500/edit-content
@@ -0,0 +1,4 @@
+#!/bin/sh
+sed -e "s/intermediate/edited/g" <"$1" >"$1-"
+mv "$1-" "$1"
+exit 0
--
1.7.3.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCHv6 2/6] pretty.c: teach format_commit_message() to reencode the output
2010-10-21 19:33 ` [PATCHv6 2/6] pretty.c: teach format_commit_message() to reencode the output Pat Notz
@ 2010-10-27 22:35 ` Junio C Hamano
0 siblings, 0 replies; 11+ messages in thread
From: Junio C Hamano @ 2010-10-27 22:35 UTC (permalink / raw)
To: Pat Notz; +Cc: git
"Pat Notz" <patnotz@gmail.com> writes:
> @@ -1008,16 +1009,29 @@ void userformat_find_requirements(const char *fmt, struct userformat_want *w)
>
> void format_commit_message(const struct commit *commit,
> const char *format, struct strbuf *sb,
> - const struct pretty_print_context *pretty_ctx)
> + const struct pretty_print_context *pretty_ctx,
> + const char *output_encoding)
> {
> struct format_commit_context context;
> + static char utf8[] = "UTF-8";
> + char *enc;
> +
> + enc = get_header(commit, "encoding");
> + enc = enc ? enc : utf8;
>
> memset(&context, 0, sizeof(context));
> context.commit = commit;
> context.pretty_ctx = pretty_ctx;
> context.wrap_start = sb->len;
> + if (output_encoding && strcmp(enc, output_encoding))
> + context.message = logmsg_reencode(commit, output_encoding);
> + context.message = context.message ? context.message : commit->buffer;
> +
> strbuf_expand(sb, format, format_commit_item, &context);
> rewrap_message_tail(sb, &context, 0, 0, 0);
> +
> + if (context.message != commit->buffer)
> + free(context.message);
> }
Three points.
- Most of the callers give NULL to the output_encoding. Does it make
sense to limit get_header(commit, "encoding") call only when the
argument is given?
- The conditional assignment to context.message with ?: is hard to read;
perhaps it would be easier to read if you structure it like this:
memset(&context, 0, sizeof(context));
context.commit = ...;
...
context.message = commit->buffer;
if (output_encoding) {
enc = ...
if (strcmp(enc, output_encoding))
context.message = ...
}
- Should output_encoding be a separate argument to this function? If
anybody is going to call this function with the same pretty_ctx with
different output_encoding, your patch may make sense, but I suspect
adding it as a new member to pretty_print_context structure may be much
cleaner. I would imagine that it would cut this patch down by 70% ;-)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCHv6 3/6] commit: --fixup option for use with rebase --autosquash
2010-10-21 19:33 ` [PATCHv6 3/6] commit: --fixup option for use with rebase --autosquash Pat Notz
@ 2010-10-27 22:35 ` Junio C Hamano
0 siblings, 0 replies; 11+ messages in thread
From: Junio C Hamano @ 2010-10-27 22:35 UTC (permalink / raw)
To: Pat Notz; +Cc: git
"Pat Notz" <patnotz@gmail.com> writes:
> diff --git a/builtin/commit.c b/builtin/commit.c
> index 5fa24f5..c82108c 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -586,6 +588,15 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
> strbuf_add(&sb, buffer + 2, strlen(buffer + 2));
> hook_arg1 = "commit";
> hook_arg2 = use_message;
> + } else if (fixup_message) {
> + struct pretty_print_context ctx = {0};
> + struct commit *commit;
> + const char *out_enc;
> + commit = lookup_commit_reference_by_name(fixup_message);
> + out_enc = get_commit_output_encoding();
> + format_commit_message(commit, "fixup! %s\n\n",
> + &sb, &ctx, out_enc);
As your lookup_commit_reference_by_name() expects the caller to check for
errors, you should do something similar to what you do in your
"use_message" codepath in your [PATCH 1/6].
if (use_message) {
const char *out_enc;
struct commit *commit;
commit = lookup_commit_reference_by_name(use_message);
if (!commit)
die("could not lookup commit %s", use_message);
out_enc = get_commit_output_encoding();
use_message_buffer = logmsg_reencode(commit, out_enc);
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCHv6 4/6] add tests of commit --fixup
2010-10-21 19:33 ` [PATCHv6 4/6] add tests of commit --fixup Pat Notz
@ 2010-10-27 22:35 ` Junio C Hamano
0 siblings, 0 replies; 11+ messages in thread
From: Junio C Hamano @ 2010-10-27 22:35 UTC (permalink / raw)
To: Pat Notz; +Cc: git
"Pat Notz" <patnotz@gmail.com> writes:
> diff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh
> index 256c4c9..f9a26c8 100755
> --- a/t/t3900-i18n-commit.sh
> +++ b/t/t3900-i18n-commit.sh
> @@ -133,4 +133,31 @@ do
> '
> done
>
> +test_commit_autosquash_flags () {
> + H=$1
> + flag=$2
> + test_expect_success "commit --$flag with $H encoding" '
> + git config i18n.commitencoding $H &&
> + git checkout -b $H-$flag C0 &&
> + echo $H >>F &&
> + git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
> + test_tick &&
> + echo intermediate stuff >>G &&
> + git add G &&
> + git commit -a -m "intermediate commit" &&
> + test_tick &&
> + echo $H $flag >>F &&
> + git commit -a --$flag HEAD~1 $3 &&
> + E=$(git cat-file commit '$H-$flag' | \
> + sed -ne "s/^encoding //p") &&
> + test "z$E" = "z'$H'" &&
A few nits.
- You don't need that backslash after the pipe (with the vertical bar at
the end of line the shell knows you haven't finished your statement).
- I am not sure what the single-quote around only the last two occurrence
of $H are about. H and flag are used as part of branch name, so I
suspect you do not need any quoting around them, no?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCHv6 5/6] commit: --squash option for use with rebase --autosquash
2010-10-21 19:33 ` [PATCHv6 5/6] commit: --squash option for use with rebase --autosquash Pat Notz
@ 2010-10-27 22:35 ` Junio C Hamano
0 siblings, 0 replies; 11+ messages in thread
From: Junio C Hamano @ 2010-10-27 22:35 UTC (permalink / raw)
To: Pat Notz; +Cc: git
"Pat Notz" <patnotz@gmail.com> writes:
> diff --git a/builtin/commit.c b/builtin/commit.c
> index c82108c..0608b76 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -567,6 +568,23 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
> if (!no_verify && run_hook(index_file, "pre-commit", NULL))
> return 0;
>
> + if (squash_message) {
> + /*
> + * Insert the proper subject line before other commit
> + * message options add their content.
> + */
> + struct pretty_print_context ctx = {0};
> + struct commit *commit;
> + const char *out_enc;
> + commit = lookup_commit_reference_by_name(squash_message);
> + out_enc = get_commit_output_encoding();
Same comment as the one for 3/6 applies here.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-10-27 22:36 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-21 19:33 [PATCHv6 0/6] Add commit message options for rebase --autosquash Pat Notz
2010-10-21 19:33 ` [PATCHv6 1/6] commit: helper methods to reduce redundant blocks of code Pat Notz
2010-10-21 19:33 ` [PATCHv6 2/6] pretty.c: teach format_commit_message() to reencode the output Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 3/6] commit: --fixup option for use with rebase --autosquash Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 4/6] add tests of commit --fixup Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 5/6] commit: --squash option for use with rebase --autosquash Pat Notz
2010-10-27 22:35 ` Junio C Hamano
2010-10-21 19:33 ` [PATCHv6 6/6] add tests of commit --squash Pat Notz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).