Skip to content

Commit

Permalink
advice: Introduce error_resolve_conflict
Browse files Browse the repository at this point in the history
Enable future callers to report a conflict and not die immediately by
introducing a new function called error_resolve_conflict.
Re-implement die_resolve_conflict as a call to error_resolve_conflict
followed by a call to die.  Consequently, the message printed by
die_resolve_conflict changes from

  fatal: 'commit' is not possible because you have unmerged files.
         Please, fix them up in the work tree ...
         ...

to

  error: 'commit' is not possible because you have unmerged files.
  hint: Fix them up in the work tree ...
  hint: ...
  fatal: Exiting because of an unresolved conflict.

Hints are printed using the same advise function introduced in
v1.7.3-rc0~26^2~3 (Introduce advise() to print hints, 2010-08-11).

Inspired-by: Christian Couder <chistian.couder@gmail.com>
Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Ramkumar Ramachandra authored and Junio C Hamano committed Aug 4, 2011
1 parent 13b70d2 commit 38ef61c
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 17 deletions.
31 changes: 24 additions & 7 deletions advice.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,15 @@ static struct {
{ "detachedhead", &advice_detached_head },
};

void advise(const char *advice, ...)
{
va_list params;

va_start(params, advice);
vreportf("hint: ", advice, params);
va_end(params);
}

int git_default_advice_config(const char *var, const char *value)
{
const char *k = skip_prefix(var, "advice.");
Expand All @@ -34,16 +43,24 @@ int git_default_advice_config(const char *var, const char *value)
return 0;
}

void NORETURN die_resolve_conflict(const char *me)
int error_resolve_conflict(const char *me)
{
if (advice_resolve_conflict)
error("'%s' is not possible because you have unmerged files.", me);
if (advice_resolve_conflict) {
/*
* Message used both when 'git commit' fails and when
* other commands doing a merge do.
*/
die("'%s' is not possible because you have unmerged files.\n"
"Please, fix them up in the work tree, and then use 'git add/rm <file>' as\n"
"appropriate to mark resolution and make a commit, or use 'git commit -a'.", me);
else
die("'%s' is not possible because you have unmerged files.", me);
advise("Fix them up in the work tree,");
advise("and then use 'git add/rm <file>' as");
advise("appropriate to mark resolution and make a commit,");
advise("or use 'git commit -a'.");
}
return -1;
}

void NORETURN die_resolve_conflict(const char *me)
{
error_resolve_conflict(me);
die("Exiting because of an unresolved conflict.");
}
3 changes: 2 additions & 1 deletion advice.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ extern int advice_implicit_identity;
extern int advice_detached_head;

int git_default_advice_config(const char *var, const char *value);

void advise(const char *advice, ...);
int error_resolve_conflict(const char *me);
extern void NORETURN die_resolve_conflict(const char *me);

#endif /* ADVICE_H */
9 changes: 0 additions & 9 deletions builtin/revert.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,6 @@ static void write_cherry_pick_head(void)
strbuf_release(&buf);
}

static void advise(const char *advice, ...)
{
va_list params;

va_start(params, advice);
vreportf("hint: ", advice, params);
va_end(params);
}

static void print_advice(void)
{
char *msg = getenv("GIT_CHERRY_PICK_HELP");
Expand Down

0 comments on commit 38ef61c

Please sign in to comment.