2009-09-09 19:38:58 +08:00
|
|
|
#include "cache.h"
|
|
|
|
|
|
|
|
int advice_push_nonfastforward = 1;
|
2009-09-09 19:43:03 +08:00
|
|
|
int advice_status_hints = 1;
|
2009-11-23 06:26:17 +08:00
|
|
|
int advice_commit_before_merge = 1;
|
Be more user-friendly when refusing to do something because of conflict.
Various commands refuse to run in the presence of conflicts (commit,
merge, pull, cherry-pick/revert). They all used to provide rough, and
inconsistant error messages.
A new variable advice.resolveconflict is introduced, and allows more
verbose messages, pointing the user to the appropriate solution.
For commit, the error message used to look like this:
$ git commit
foo.txt: needs merge
foo.txt: unmerged (c34a92682e0394bc0d6f4d4a67a8e2d32395c169)
foo.txt: unmerged (3afcd75de8de0bb5076942fcb17446be50451030)
foo.txt: unmerged (c9785d77b76dfe4fb038bf927ee518f6ae45ede4)
error: Error building trees
The "need merge" line is given by refresh_cache. We add the IN_PORCELAIN
option to make the output more consistant with the other porcelain
commands, and catch the error in return, to stop with a clean error
message. The next lines were displayed by a call to cache_tree_update(),
which is not reached anymore if we noticed the conflict.
The new output looks like:
U foo.txt
fatal: 'commit' is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as
appropriate to mark resolution and make a commit, or use 'git commit -a'.
Pull is slightly modified to abort immediately if $GIT_DIR/MERGE_HEAD
exists instead of waiting for merge to complain.
The behavior of merge and the test-case are slightly modified to reflect
the usual flow: start with conflicts, fix them, and afterwards get rid of
MERGE_HEAD, with different error messages at each stage.
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-01-12 17:54:44 +08:00
|
|
|
int advice_resolve_conflict = 1;
|
2010-01-14 04:17:08 +08:00
|
|
|
int advice_implicit_identity = 1;
|
2010-01-30 14:03:24 +08:00
|
|
|
int advice_detached_head = 1;
|
2009-09-09 19:38:58 +08:00
|
|
|
|
|
|
|
static struct {
|
|
|
|
const char *name;
|
|
|
|
int *preference;
|
|
|
|
} advice_config[] = {
|
|
|
|
{ "pushnonfastforward", &advice_push_nonfastforward },
|
2009-09-09 19:43:03 +08:00
|
|
|
{ "statushints", &advice_status_hints },
|
2009-11-23 06:26:17 +08:00
|
|
|
{ "commitbeforemerge", &advice_commit_before_merge },
|
Be more user-friendly when refusing to do something because of conflict.
Various commands refuse to run in the presence of conflicts (commit,
merge, pull, cherry-pick/revert). They all used to provide rough, and
inconsistant error messages.
A new variable advice.resolveconflict is introduced, and allows more
verbose messages, pointing the user to the appropriate solution.
For commit, the error message used to look like this:
$ git commit
foo.txt: needs merge
foo.txt: unmerged (c34a92682e0394bc0d6f4d4a67a8e2d32395c169)
foo.txt: unmerged (3afcd75de8de0bb5076942fcb17446be50451030)
foo.txt: unmerged (c9785d77b76dfe4fb038bf927ee518f6ae45ede4)
error: Error building trees
The "need merge" line is given by refresh_cache. We add the IN_PORCELAIN
option to make the output more consistant with the other porcelain
commands, and catch the error in return, to stop with a clean error
message. The next lines were displayed by a call to cache_tree_update(),
which is not reached anymore if we noticed the conflict.
The new output looks like:
U foo.txt
fatal: 'commit' is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as
appropriate to mark resolution and make a commit, or use 'git commit -a'.
Pull is slightly modified to abort immediately if $GIT_DIR/MERGE_HEAD
exists instead of waiting for merge to complain.
The behavior of merge and the test-case are slightly modified to reflect
the usual flow: start with conflicts, fix them, and afterwards get rid of
MERGE_HEAD, with different error messages at each stage.
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-01-12 17:54:44 +08:00
|
|
|
{ "resolveconflict", &advice_resolve_conflict },
|
2010-01-14 04:17:08 +08:00
|
|
|
{ "implicitidentity", &advice_implicit_identity },
|
2010-01-30 14:03:24 +08:00
|
|
|
{ "detachedhead", &advice_detached_head },
|
2009-09-09 19:38:58 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
int git_default_advice_config(const char *var, const char *value)
|
|
|
|
{
|
|
|
|
const char *k = skip_prefix(var, "advice.");
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(advice_config); i++) {
|
|
|
|
if (strcmp(k, advice_config[i].name))
|
|
|
|
continue;
|
|
|
|
*advice_config[i].preference = git_config_bool(var, value);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
Be more user-friendly when refusing to do something because of conflict.
Various commands refuse to run in the presence of conflicts (commit,
merge, pull, cherry-pick/revert). They all used to provide rough, and
inconsistant error messages.
A new variable advice.resolveconflict is introduced, and allows more
verbose messages, pointing the user to the appropriate solution.
For commit, the error message used to look like this:
$ git commit
foo.txt: needs merge
foo.txt: unmerged (c34a92682e0394bc0d6f4d4a67a8e2d32395c169)
foo.txt: unmerged (3afcd75de8de0bb5076942fcb17446be50451030)
foo.txt: unmerged (c9785d77b76dfe4fb038bf927ee518f6ae45ede4)
error: Error building trees
The "need merge" line is given by refresh_cache. We add the IN_PORCELAIN
option to make the output more consistant with the other porcelain
commands, and catch the error in return, to stop with a clean error
message. The next lines were displayed by a call to cache_tree_update(),
which is not reached anymore if we noticed the conflict.
The new output looks like:
U foo.txt
fatal: 'commit' is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as
appropriate to mark resolution and make a commit, or use 'git commit -a'.
Pull is slightly modified to abort immediately if $GIT_DIR/MERGE_HEAD
exists instead of waiting for merge to complain.
The behavior of merge and the test-case are slightly modified to reflect
the usual flow: start with conflicts, fix them, and afterwards get rid of
MERGE_HEAD, with different error messages at each stage.
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-01-12 17:54:44 +08:00
|
|
|
|
|
|
|
void NORETURN die_resolve_conflict(const char *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);
|
|
|
|
}
|