1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 07:56:11 +02: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:
Pat Notz 2010-11-02 13:59:07 -06:00 committed by Junio C Hamano
parent c752e7f3e8
commit a6fa59924d
8 changed files with 36 additions and 32 deletions

View File

@ -896,30 +896,14 @@ static int parse_and_validate_options(int argc, const char *argv[],
if (!use_message && renew_authorship) if (!use_message && renew_authorship)
die("--reset-author can be used only with -C, -c or --amend."); die("--reset-author can be used only with -C, -c or --amend.");
if (use_message) { if (use_message) {
unsigned char sha1[20];
static char utf8[] = "UTF-8";
const char *out_enc; const char *out_enc;
char *enc, *end;
struct commit *commit; 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); die("could not lookup commit %s", use_message);
commit = lookup_commit_reference(sha1); out_enc = get_commit_output_encoding();
if (!commit || parse_commit(commit)) use_message_buffer = logmsg_reencode(commit, out_enc);
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);
/* /*
* If we failed to reencode the buffer, just copy it * 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) if (use_message_buffer == NULL)
use_message_buffer = xstrdup(commit->buffer); use_message_buffer = xstrdup(commit->buffer);
if (enc != utf8)
free(enc);
} }
if (!!also + !!only + !!all + !!interactive > 1) if (!!also + !!only + !!all + !!interactive > 1)

View File

@ -329,8 +329,7 @@ static void show_tagger(char *buf, int len, struct rev_info *rev)
struct strbuf out = STRBUF_INIT; struct strbuf out = STRBUF_INIT;
pp_user_info("Tagger", rev->commit_format, &out, buf, rev->date_mode, pp_user_info("Tagger", rev->commit_format, &out, buf, rev->date_mode,
git_log_output_encoding ? get_log_output_encoding());
git_log_output_encoding: git_commit_encoding);
printf("%s", out.buf); printf("%s", out.buf);
strbuf_release(&out); strbuf_release(&out);
} }

View File

@ -1032,7 +1032,7 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
*/ */
git_config(git_mailinfo_config, NULL); 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; metainfo_charset = def_charset;
while (1 < argc && argv[1][0] == '-') { while (1 < argc && argv[1][0] == '-') {

View File

@ -1003,6 +1003,9 @@ extern int git_env_bool(const char *, int);
extern int git_config_system(void); extern int git_config_system(void);
extern int git_config_global(void); extern int git_config_global(void);
extern int config_error_nonbool(const char *); 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; extern const char *config_exclusive_filename;
#define MAX_GITNAME (1000) #define MAX_GITNAME (1000)

View File

@ -49,6 +49,19 @@ struct commit *lookup_commit(const unsigned char *sha1)
return check_commit(obj, sha1, 0); 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) static unsigned long parse_commit_date(const char *buf, const char *tail)
{ {
const char *dateptr; const char *dateptr;

View File

@ -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(const unsigned char *sha1);
struct commit *lookup_commit_reference_gently(const unsigned char *sha1, struct commit *lookup_commit_reference_gently(const unsigned char *sha1,
int quiet); int quiet);
struct commit *lookup_commit_reference_by_name(const char *name);
int parse_commit_buffer(struct commit *item, void *buffer, unsigned long size); int parse_commit_buffer(struct commit *item, void *buffer, unsigned long size);

View File

@ -192,3 +192,14 @@ int set_git_dir(const char *path)
setup_git_env(); setup_git_env();
return 0; 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";
}

View File

@ -886,8 +886,7 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder,
case 'N': case 'N':
if (c->pretty_ctx->show_notes) { if (c->pretty_ctx->show_notes) {
format_display_notes(commit->object.sha1, sb, format_display_notes(commit->object.sha1, sb,
git_log_output_encoding ? git_log_output_encoding get_log_output_encoding(), 0);
: git_commit_encoding, 0);
return 1; return 1;
} }
return 0; return 0;
@ -1159,11 +1158,7 @@ char *reencode_commit_message(const struct commit *commit, const char **encoding
{ {
const char *encoding; const char *encoding;
encoding = (git_log_output_encoding encoding = get_log_output_encoding();
? git_log_output_encoding
: git_commit_encoding);
if (!encoding)
encoding = "UTF-8";
if (encoding_p) if (encoding_p)
*encoding_p = encoding; *encoding_p = encoding;
return logmsg_reencode(commit, encoding); return logmsg_reencode(commit, encoding);