mirror of
https://github.com/git/git.git
synced 2024-11-23 09:56:28 +08:00
commit: helper methods to reduce redundant blocks of code
* 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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c752e7f3e8
commit
a6fa59924d
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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] == '-') {
|
||||
|
3
cache.h
3
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)
|
||||
|
13
commit.c
13
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;
|
||||
|
1
commit.h
1
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);
|
||||
|
||||
|
@ -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";
|
||||
}
|
||||
|
9
pretty.c
9
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);
|
||||
|
Loading…
Reference in New Issue
Block a user