Browse Source

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>
maint
Pat Notz 14 years ago committed by Junio C Hamano
parent
commit
a6fa59924d
  1. 26
      builtin/commit.c
  2. 3
      builtin/log.c
  3. 2
      builtin/mailinfo.c
  4. 3
      cache.h
  5. 13
      commit.c
  6. 1
      commit.h
  7. 11
      environment.c
  8. 9
      pretty.c

26
builtin/commit.c

@ -896,30 +896,14 @@ static int parse_and_validate_options(int argc, const char *argv[], @@ -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[], @@ -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)

3
builtin/log.c

@ -329,8 +329,7 @@ static void show_tagger(char *buf, int len, struct rev_info *rev) @@ -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);
}

2
builtin/mailinfo.c

@ -1032,7 +1032,7 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) @@ -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

@ -1003,6 +1003,9 @@ extern int git_env_bool(const char *, int); @@ -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

@ -49,6 +49,19 @@ struct commit *lookup_commit(const unsigned char *sha1) @@ -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

@ -36,6 +36,7 @@ struct commit *lookup_commit(const unsigned char *sha1); @@ -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);


11
environment.c

@ -192,3 +192,14 @@ int set_git_dir(const char *path) @@ -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

@ -886,8 +886,7 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder, @@ -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 @@ -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…
Cancel
Save