mirror of
https://github.com/git-for-windows/git.git
synced 2026-04-22 23:37:25 -05:00
Merge branch 'jc/show-merge' into next
* jc/show-merge: git log -p --merge [[--] paths...] send-email: format 2822 datestring ourselves. Do not drop data from '\0' until eol in patch output builtin-log: respect diff configuration options
This commit is contained in:
@@ -47,6 +47,7 @@ int cmd_whatchanged(int argc, const char **argv, char **envp)
|
||||
{
|
||||
struct rev_info rev;
|
||||
|
||||
git_config(git_diff_config);
|
||||
init_revisions(&rev);
|
||||
rev.diff = 1;
|
||||
rev.diffopt.recursive = 1;
|
||||
@@ -61,6 +62,7 @@ int cmd_show(int argc, const char **argv, char **envp)
|
||||
{
|
||||
struct rev_info rev;
|
||||
|
||||
git_config(git_diff_config);
|
||||
init_revisions(&rev);
|
||||
rev.diff = 1;
|
||||
rev.diffopt.recursive = 1;
|
||||
@@ -77,6 +79,7 @@ int cmd_log(int argc, const char **argv, char **envp)
|
||||
{
|
||||
struct rev_info rev;
|
||||
|
||||
git_config(git_diff_config);
|
||||
init_revisions(&rev);
|
||||
rev.always_show_header = 1;
|
||||
cmd_log_init(argc, argv, envp, &rev);
|
||||
@@ -102,7 +105,7 @@ static int git_format_config(const char *var, const char *value)
|
||||
strcat(extra_headers, value);
|
||||
return 0;
|
||||
}
|
||||
return git_default_config(var, value);
|
||||
return git_diff_config(var, value);
|
||||
}
|
||||
|
||||
|
||||
@@ -234,6 +237,7 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
|
||||
struct diff_options patch_id_opts;
|
||||
char *add_signoff = NULL;
|
||||
|
||||
git_config(git_format_config);
|
||||
init_revisions(&rev);
|
||||
rev.commit_format = CMIT_FMT_EMAIL;
|
||||
rev.verbose_header = 1;
|
||||
@@ -243,7 +247,6 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
|
||||
rev.diffopt.msg_sep = "";
|
||||
rev.diffopt.recursive = 1;
|
||||
|
||||
git_config(git_format_config);
|
||||
rev.extra_headers = extra_headers;
|
||||
|
||||
/*
|
||||
|
||||
4
diff.c
4
diff.c
@@ -329,7 +329,9 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
|
||||
}
|
||||
if (len > 0 && line[len-1] == '\n')
|
||||
len--;
|
||||
printf("%s%.*s%s\n", set, (int) len, line, reset);
|
||||
fputs (set, stdout);
|
||||
fwrite (line, len, 1, stdout);
|
||||
puts (reset);
|
||||
}
|
||||
|
||||
static char *pprint_rename(const char *a, const char *b)
|
||||
|
||||
@@ -35,8 +35,43 @@ sub readline {
|
||||
package main;
|
||||
|
||||
# most mail servers generate the Date: header, but not all...
|
||||
$ENV{LC_ALL} = 'C';
|
||||
use POSIX qw/strftime/;
|
||||
sub format_2822_time {
|
||||
my ($time) = @_;
|
||||
my @localtm = localtime($time);
|
||||
my @gmttm = gmtime($time);
|
||||
my $localmin = $localtm[1] + $localtm[2] * 60;
|
||||
my $gmtmin = $gmttm[1] + $gmttm[2] * 60;
|
||||
if ($localtm[0] != $gmttm[0]) {
|
||||
die "local zone differs from GMT by a non-minute interval\n";
|
||||
}
|
||||
if ((($gmttm[6] + 1) % 7) == $localtm[6]) {
|
||||
$localmin += 1440;
|
||||
} elsif ((($gmttm[6] - 1) % 7) == $localtm[6]) {
|
||||
$localmin -= 1440;
|
||||
} elsif ($gmttm[6] != $localtm[6]) {
|
||||
die "local time offset greater than or equal to 24 hours\n";
|
||||
}
|
||||
my $offset = $localmin - $gmtmin;
|
||||
my $offhour = $offset / 60;
|
||||
my $offmin = abs($offset % 60);
|
||||
if (abs($offhour) >= 24) {
|
||||
die ("local time offset greater than or equal to 24 hours\n");
|
||||
}
|
||||
|
||||
return sprintf("%s, %2d %s %d %02d:%02d:%02d %s%02d%02d",
|
||||
qw(Sun Mon Tue Wed Thu Fri Sat)[$localtm[6]],
|
||||
$localtm[3],
|
||||
qw(Jan Feb Mar Apr May Jun
|
||||
Jul Aug Sep Oct Nov Dec)[$localtm[4]],
|
||||
$localtm[5]+1900,
|
||||
$localtm[2],
|
||||
$localtm[1],
|
||||
$localtm[0],
|
||||
($offset >= 0) ? '+' : '-',
|
||||
abs($offhour),
|
||||
$offmin,
|
||||
);
|
||||
}
|
||||
|
||||
my $have_email_valid = eval { require Email::Valid; 1 };
|
||||
my $smtp;
|
||||
@@ -368,7 +403,7 @@ sub send_message
|
||||
my @recipients = unique_email_list(@to);
|
||||
my $to = join (",\n\t", @recipients);
|
||||
@recipients = unique_email_list(@recipients,@cc,@bcclist);
|
||||
my $date = strftime('%a, %d %b %Y %H:%M:%S %z', localtime($time++));
|
||||
my $date = format_2822_time($time++);
|
||||
my $gitversion = '@@GIT_VERSION@@';
|
||||
if ($gitversion =~ m/..GIT_VERSION../) {
|
||||
$gitversion = Git::version();
|
||||
|
||||
53
revision.c
53
revision.c
@@ -549,6 +549,49 @@ static void add_pending_commit_list(struct rev_info *revs,
|
||||
}
|
||||
}
|
||||
|
||||
static void prepare_show_merge(struct rev_info *revs)
|
||||
{
|
||||
struct commit_list *bases;
|
||||
struct commit *head, *other;
|
||||
unsigned char sha1[20];
|
||||
const char **prune = NULL;
|
||||
int i, prune_num = 1; /* counting terminating NULL */
|
||||
|
||||
if (get_sha1("HEAD", sha1) || !(head = lookup_commit(sha1)))
|
||||
die("--merge without HEAD?");
|
||||
if (get_sha1("MERGE_HEAD", sha1) || !(other = lookup_commit(sha1)))
|
||||
die("--merge without MERGE_HEAD?");
|
||||
add_pending_object(revs, &head->object, "HEAD");
|
||||
add_pending_object(revs, &other->object, "MERGE_HEAD");
|
||||
bases = get_merge_bases(head, other, 1);
|
||||
while (bases) {
|
||||
struct commit *it = bases->item;
|
||||
struct commit_list *n = bases->next;
|
||||
free(bases);
|
||||
bases = n;
|
||||
it->object.flags |= UNINTERESTING;
|
||||
add_pending_object(revs, &it->object, "(merge-base)");
|
||||
}
|
||||
|
||||
if (!active_nr)
|
||||
read_cache();
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
if (!ce_stage(ce))
|
||||
continue;
|
||||
if (ce_path_match(ce, revs->prune_data)) {
|
||||
prune_num++;
|
||||
prune = xrealloc(prune, sizeof(*prune) * prune_num);
|
||||
prune[prune_num-2] = ce->name;
|
||||
prune[prune_num-1] = NULL;
|
||||
}
|
||||
while ((i+1 < active_nr) &&
|
||||
ce_same_name(ce, active_cache[i+1]))
|
||||
i++;
|
||||
}
|
||||
revs->prune_data = prune;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse revision information, filling in the "rev_info" structure,
|
||||
* and removing the used arguments from the argument list.
|
||||
@@ -558,7 +601,7 @@ static void add_pending_commit_list(struct rev_info *revs,
|
||||
*/
|
||||
int setup_revisions(int argc, const char **argv, struct rev_info *revs, const char *def)
|
||||
{
|
||||
int i, flags, seen_dashdash;
|
||||
int i, flags, seen_dashdash, show_merge;
|
||||
const char **unrecognized = argv + 1;
|
||||
int left = 1;
|
||||
|
||||
@@ -575,7 +618,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
|
||||
break;
|
||||
}
|
||||
|
||||
flags = 0;
|
||||
flags = show_merge = 0;
|
||||
for (i = 1; i < argc; i++) {
|
||||
struct object *object;
|
||||
const char *arg = argv[i];
|
||||
@@ -642,6 +685,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
|
||||
def = argv[i];
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--merge")) {
|
||||
show_merge = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--topo-order")) {
|
||||
revs->topo_order = 1;
|
||||
continue;
|
||||
@@ -863,6 +910,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
|
||||
object = get_reference(revs, arg, sha1, flags ^ local_flags);
|
||||
add_pending_object(revs, object, arg);
|
||||
}
|
||||
if (show_merge)
|
||||
prepare_show_merge(revs);
|
||||
if (def && !revs->pending.nr) {
|
||||
unsigned char sha1[20];
|
||||
struct object *object;
|
||||
|
||||
Reference in New Issue
Block a user