From: Junio C Hamano <gitster@pobox.com>
To: Caleb Cushing <xenoterracide@gmail.com>
Cc: git@vger.kernel.org, "Theodore Ts'o" <tytso@mit.edu>,
Daniel Barkalow <barkalow@iabervon.org>
Subject: Re: mergetool feature request - select remote or local
Date: Wed, 14 May 2008 10:47:09 -0700 [thread overview]
Message-ID: <7vzlqsok0y.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <200805140721.13719.xenoterracide@gmail.com> (Caleb Cushing's message of "Wed, 14 May 2008 07:21:00 -0400")
Caleb Cushing <xenoterracide@gmail.com> writes:
> sometimes when merge-ing fast forward doesn't work. but you know what the
> resolution you want is.
>
> example (current behavior)
> Normal merge conflict for 'css/main.css':
> {local}: modified
> {remote}: modified
> Hit return to start merge resolution tool (vimdiff):
>
> but I don't want to. I know the remote updates are right. I could do a git
> checkout remotebranch filename but when you have 20 files that need updating
> this is annoying
I never understood why people are using git and not ftp when they say the
other side is always right, but I see this comes up every once in a while,
so it would probably be a good thing to support.
> my suggestion is this
> Normal merge conflict for 'css/main.css':
> {local}: modified
> {remote}: modified
> Use (l)local or (r)remote or (m)anual?
The above "(l)local" and "(m)anual" look inconsistent, and the wording
should be more like "local, remote or merge".
> also in the event of having 20 files with this issue it would be nice to have
> an option after first starting mergetool for remote all or local all.
This makes me wonder if you are better off not using mergetool in such a
situation. Instead, perhaps
$ git ls-files -u --no-stage | xargs git checkout MERGE_HEAD
might be a better option? The attached is a completely untested
weather-baloon patch.
If this turns out to be a better approach, perhaps we would further want
to tweak things to make:
$ git checkout --unmerged MERGE_HEAD [--] [<pathspec>...]
to work (if you want "local", you would use "HEAD" instead of
"MERGE_HEAD").
I would have done so here if "git checkout" were still a scripted version,
but now it is in C, it would take significantly more effort than it is
worth just to raise a weatherbaloon.
builtin-ls-files.c | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/builtin-ls-files.c b/builtin-ls-files.c
index dc7eab8..36b2875 100644
--- a/builtin-ls-files.c
+++ b/builtin-ls-files.c
@@ -181,6 +181,8 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce)
{
int len = prefix_len;
int offset = prefix_offset;
+ static const char *last_tag_shown;
+ static struct cache_entry *last_ce_shown;
if (len >= ce_namelen(ce))
die("git-ls-files: internal error - cache entry not superset of prefix");
@@ -206,7 +208,18 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce)
}
if (!show_stage) {
+ /*
+ * Even when not showing stage information, we will call this
+ * function for each stage. Omit duplicate output.
+ */
+ if ((!tag ||
+ (last_tag_shown && !strcmp(last_tag_shown, tag))) &&
+ (last_ce_shown &&
+ !strcmp(last_ce_shown->name, ce->name)))
+ return;
fputs(tag, stdout);
+ last_tag_shown = tag;
+ last_ce_shown = ce;
} else {
printf("%s%06o %s %d\t",
tag,
@@ -509,6 +522,15 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix)
show_unmerged = 1;
continue;
}
+ if (!strcmp(arg, "--no-stage")) {
+ /*
+ * ... Not really.
+ * Sometimes we would want a list of unmerged paths.
+ */
+ show_stage = 0;
+ show_cached = 1;
+ continue;
+ }
if (!strcmp(arg, "-x") && i+1 < argc) {
exc_given = 1;
add_exclude(argv[++i], "", 0, &dir.exclude_list[EXC_CMDL]);
next prev parent reply other threads:[~2008-05-14 17:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-14 11:21 mergetool feature request - select remote or local Caleb Cushing
2008-05-14 17:47 ` Junio C Hamano [this message]
2008-05-14 18:40 ` Daniel Barkalow
2008-05-14 19:19 ` Junio C Hamano
2008-05-15 1:25 ` Caleb Cushing
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vzlqsok0y.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=barkalow@iabervon.org \
--cc=git@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=xenoterracide@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.