All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/6] pull: make code more similar to the shell script again
Date: Fri, 9 Sep 2016 12:49:57 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.20.1609091244500.129229@virtualbox> (raw)
In-Reply-To: <xmqqr3976vcy.fsf@gitster.mtv.corp.google.com>

Hi Junio,

On Mon, 29 Aug 2016, Junio C Hamano wrote:

> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> 
> > +static int require_clean_work_tree(const char *action, const char *hint,
> > +		int gently)
> >  {
> >  	struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file));
> > -	int do_die = 0;
> > +	int err = 0;
> >  
> >  	hold_locked_index(lock_file, 0);
> >  	refresh_cache(REFRESH_QUIET);
> > @@ -376,20 +377,26 @@ static void die_on_unclean_work_tree(void)
> >  	rollback_lock_file(lock_file);
> >  
> >  	if (has_unstaged_changes()) {
> > -		error(_("Cannot pull with rebase: You have unstaged changes."));
> > -		do_die = 1;
> > +		error(_("Cannot %s: You have unstaged changes."), action);
> > ...
> >  		if (!autostash)
> > -			die_on_unclean_work_tree();
> > +			require_clean_work_tree("pull with rebase",
> > +				"Please commit or stash them.", 0);
> >  
> >  		if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
> >  			hashclr(rebase_fork_point);
> 
> Splicing an English/C phrase 'pull with rebase' into a
> _("localizable %s string") makes the life of i18n team hard.
> 
> Can we do this differently?
> 
> If you are eventually going to expose this function as public API, I
> think the right approach would be to enumerate the possible error
> conditions this function can diagnose and return them to the caller,
> i.e.
> 
>     #define WT_STATUS_DIRTY_WORKTREE 01
>     #define WT_STATUS_DIRTY_INDEX    02
> 
>     static int require_clean_work_tree(void)
>     {
> 	int status = 0;
> 	...
>         if (has_unstaged_changes())
>         	status |= WT_STATUS_DIRTY_WORKTREE;
> 	if (has_uncommitted_changes())
>         	status |= WT_STATUS_DIRTY_INDEX;
> 	return status;
>     }
> 
> Then die_on_unclean_work_tree() can be made as a thin-wrapper that
> calls it and shows the pull-specific error message.

Hrm. After thinking about this for over a week, I think that this is the
wrong approach.

To introduce new wrapper functions just for the sake of being able to
provide possibly dozens of different error messages seems quite a bit
wrong.

I agree, however, that it may be a better idea to add a "gently" flag to
require_clean_work_tree() that lets it print out a (localizable) error
message and return -1 instead of die()ing.

The result would be that a failed `git pull --rebase` would then print out
*two* lines: one explaining that there are unstaged changes, and one that
explains that the pull did not even start due to an unclean work tree.

That solution would scale better, and I may get a chance to make those
changes and send out another iteration of this patch series before
October.

Ciao,
Johannes

  parent reply	other threads:[~2016-09-09 10:50 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-25 15:06 [PATCH 0/6] Pull out require_clean_work_tree() functionality from builtin/pull.c Johannes Schindelin
2016-08-25 15:06 ` [PATCH 1/6] pull: drop confusing prefix parameter of die_on_unclean_work_tree() Johannes Schindelin
2016-08-29 22:41   ` Junio C Hamano
2016-08-25 15:06 ` [PATCH 2/6] pull: make code more similar to the shell script again Johannes Schindelin
2016-08-29 22:52   ` Junio C Hamano
2016-08-30 17:56     ` Johannes Schindelin
2016-09-09 10:49     ` Johannes Schindelin [this message]
2016-08-25 15:06 ` [PATCH 3/6] Make the require_clean_work_tree() function truly reusable Johannes Schindelin
2016-08-25 15:06 ` [PATCH 4/6] require_clean_work_tree: ensure that the index was read Johannes Schindelin
2016-08-29 23:01   ` Junio C Hamano
2016-08-30  2:44     ` Junio C Hamano
2016-08-30 11:00       ` Johannes Schindelin
2016-08-30 14:46         ` Johannes Schindelin
2016-08-30 16:23           ` Junio C Hamano
2016-08-30 10:50     ` Johannes Schindelin
2016-08-25 15:07 ` [PATCH 5/6] Export also the has_un{staged,committed}_changed() functions Johannes Schindelin
2016-08-29 23:03   ` Junio C Hamano
2016-08-25 15:07 ` [PATCH 6/6] wt-status: teach has_{unstaged,uncommitted}_changes() about submodules Johannes Schindelin
2016-09-11  8:02 ` [PATCH v2 0/5] Pull out require_clean_work_tree() functionality from builtin/pull.c Johannes Schindelin
2016-09-11  8:02   ` [PATCH v2 1/5] pull: drop confusing prefix parameter of die_on_unclean_work_tree() Johannes Schindelin
2016-09-11  8:02   ` [PATCH v2 2/5] pull: make code more similar to the shell script again Johannes Schindelin
2016-09-12 18:56     ` Junio C Hamano
2016-09-11  8:02   ` [PATCH v2 3/5] Make the require_clean_work_tree() function truly reusable Johannes Schindelin
2016-09-12 18:58     ` Junio C Hamano
2016-09-11  8:02   ` [PATCH v2 4/5] Export also the has_un{staged,committed}_changed() functions Johannes Schindelin
2016-09-11  8:03   ` [PATCH v2 5/5] wt-status: teach has_{unstaged,uncommitted}_changes() about submodules Johannes Schindelin
2016-09-12 19:36   ` [PATCH v2 0/5] Pull out require_clean_work_tree() functionality from builtin/pull.c Junio C Hamano
2016-10-04 13:04   ` [PATCH v3 0/6] " Johannes Schindelin
2016-10-04 13:05     ` [PATCH v3 1/6] pull: drop confusing prefix parameter of die_on_unclean_work_tree() Johannes Schindelin
2016-10-04 13:05     ` [PATCH v3 2/6] pull: make code more similar to the shell script again Johannes Schindelin
2016-10-04 13:05     ` [PATCH v3 3/6] Make the require_clean_work_tree() function reusable Johannes Schindelin
2016-10-04 18:52       ` Junio C Hamano
2016-10-05 11:25         ` Johannes Schindelin
2016-10-05 16:23           ` Junio C Hamano
2016-10-04 13:05     ` [PATCH v3 4/6] Export also the has_un{staged,committed}_changed() functions Johannes Schindelin
2016-10-04 18:53       ` Junio C Hamano
2016-10-05 19:20       ` Jakub Narębski
2016-10-04 13:05     ` [PATCH v3 5/6] wt-status: teach has_{unstaged,uncommitted}_changes() about submodules Johannes Schindelin
2016-10-04 13:06     ` [PATCH v3 6/6] wt-status: begin error messages with lower-case Johannes Schindelin
2016-10-05 19:23       ` Jakub Narębski
2016-10-06 10:28         ` Johannes Schindelin
2016-10-04 18:56     ` [PATCH v3 0/6] Pull out require_clean_work_tree() functionality from builtin/pull.c Junio C Hamano
2016-10-05 11:35       ` Johannes Schindelin
2016-10-07 16:08     ` [PATCH v4 " Johannes Schindelin
2016-10-07 16:08       ` [PATCH v4 1/6] pull: drop confusing prefix parameter of die_on_unclean_work_tree() Johannes Schindelin
2016-10-07 16:08       ` [PATCH v4 2/6] pull: make code more similar to the shell script again Johannes Schindelin
2016-10-07 16:08       ` [PATCH v4 3/6] wt-status: make the require_clean_work_tree() function reusable Johannes Schindelin
2016-10-07 16:08       ` [PATCH v4 4/6] wt-status: export also the has_un{staged,committed}_changes() functions Johannes Schindelin
2016-10-07 16:09       ` [PATCH v4 5/6] wt-status: teach has_{unstaged,uncommitted}_changes() about submodules Johannes Schindelin
2016-10-07 16:09       ` [PATCH v4 6/6] wt-status: begin error messages with lower-case Johannes Schindelin
2016-10-07 16:34       ` [PATCH v4 0/6] Pull out require_clean_work_tree() functionality from builtin/pull.c Junio C Hamano
2016-10-07 16:37       ` Jakub Narębski

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=alpine.DEB.2.20.1609091244500.129229@virtualbox \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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.