* [PATCH 0/6] pull: improve default warning
@ 2020-11-24 13:30 Felipe Contreras
2020-11-24 13:30 ` [PATCH 1/6] pull: refactor fast-forward check Felipe Contreras
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
This patch series attempts to silence a bit more the default pull warning (when no pull.rebase is
configured, or pull.ff).
Basically; display the warning only when a fast-forward merge is not possible.
More work is needed to add a ff-only option.
Felipe Contreras (6):
pull: refactor fast-forward check
pull: cleanup autostash check
pull: trivial cleanup
pull: move default warning
pull: display default warning only when non-ff
test: pull-options: revert unnecessary changes
builtin/pull.c | 79 ++++++++++++++++++++----------------
t/t5521-pull-options.sh | 22 +++++-----
t/t7601-merge-pull-config.sh | 8 +++-
3 files changed, 61 insertions(+), 48 deletions(-)
--
2.29.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/6] pull: refactor fast-forward check
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
@ 2020-11-24 13:30 ` Felipe Contreras
2020-11-24 13:30 ` [PATCH 2/6] pull: cleanup autostash check Felipe Contreras
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
This way we will be able to do the check unconditionally (merge or
rebase).
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin/pull.c | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index 17aa63cd35..e2de0d4c91 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -906,6 +906,20 @@ static int run_rebase(const struct object_id *curr_head,
return ret;
}
+static int get_can_ff(struct object_id *orig_head, struct object_id *orig_merge_head)
+{
+ int ret;
+ struct commit_list *list = NULL;
+ struct commit *merge_head, *head;
+
+ head = lookup_commit_reference(the_repository, orig_head);
+ commit_list_insert(head, &list);
+ merge_head = lookup_commit_reference(the_repository, orig_merge_head);
+ ret = repo_is_descendant_of(the_repository, merge_head, list);
+ free_commit_list(list);
+ return ret;
+}
+
int cmd_pull(int argc, const char **argv, const char *prefix)
{
const char *repo, **refspecs;
@@ -1016,22 +1030,12 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
submodule_touches_in_range(the_repository, &rebase_fork_point, &curr_head))
die(_("cannot rebase with locally recorded submodule modifications"));
if (!autostash) {
- struct commit_list *list = NULL;
- struct commit *merge_head, *head;
-
- head = lookup_commit_reference(the_repository,
- &orig_head);
- commit_list_insert(head, &list);
- merge_head = lookup_commit_reference(the_repository,
- &merge_heads.oid[0]);
- if (repo_is_descendant_of(the_repository,
- merge_head, list)) {
+ if (get_can_ff(&orig_head, &merge_heads.oid[0])) {
/* we can fast-forward this without invoking rebase */
opt_ff = "--ff-only";
ran_ff = 1;
ret = run_merge();
}
- free_commit_list(list);
}
if (!ran_ff)
ret = run_rebase(&curr_head, merge_heads.oid, &rebase_fork_point);
--
2.29.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] pull: cleanup autostash check
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
2020-11-24 13:30 ` [PATCH 1/6] pull: refactor fast-forward check Felipe Contreras
@ 2020-11-24 13:30 ` Felipe Contreras
2020-11-24 13:30 ` [PATCH 3/6] pull: trivial cleanup Felipe Contreras
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
This essentially reverts commit f15e7cf5cc.
Once commit d9f15d37f1 introduced the autostash option for the merge
mode, it's no necessary to skip the fast-forward run_merge() when
autostash is set.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin/pull.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index e2de0d4c91..eaa268c559 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -926,7 +926,6 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
struct oid_array merge_heads = OID_ARRAY_INIT;
struct object_id orig_head, curr_head;
struct object_id rebase_fork_point;
- int autostash;
if (!getenv("GIT_REFLOG_ACTION"))
set_reflog_message(argc, argv);
@@ -959,8 +958,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
if (get_oid("HEAD", &orig_head))
oidclr(&orig_head);
- autostash = config_autostash;
if (opt_rebase) {
+ int autostash = config_autostash;
if (opt_autostash != -1)
autostash = opt_autostash;
@@ -1029,13 +1028,11 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) &&
submodule_touches_in_range(the_repository, &rebase_fork_point, &curr_head))
die(_("cannot rebase with locally recorded submodule modifications"));
- if (!autostash) {
- if (get_can_ff(&orig_head, &merge_heads.oid[0])) {
- /* we can fast-forward this without invoking rebase */
- opt_ff = "--ff-only";
- ran_ff = 1;
- ret = run_merge();
- }
+ if (get_can_ff(&orig_head, &merge_heads.oid[0])) {
+ /* we can fast-forward this without invoking rebase */
+ opt_ff = "--ff-only";
+ ran_ff = 1;
+ ret = run_merge();
}
if (!ran_ff)
ret = run_rebase(&curr_head, merge_heads.oid, &rebase_fork_point);
--
2.29.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] pull: trivial cleanup
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
2020-11-24 13:30 ` [PATCH 1/6] pull: refactor fast-forward check Felipe Contreras
2020-11-24 13:30 ` [PATCH 2/6] pull: cleanup autostash check Felipe Contreras
@ 2020-11-24 13:30 ` Felipe Contreras
2020-11-24 13:30 ` [PATCH 4/6] pull: move default warning Felipe Contreras
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
There's no need to store ran_ff. Now it's obvious from the conditionals.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin/pull.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index eaa268c559..121b9fb0e1 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -1023,19 +1023,18 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
if (opt_rebase) {
int ret = 0;
- int ran_ff = 0;
if ((recurse_submodules == RECURSE_SUBMODULES_ON ||
recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) &&
submodule_touches_in_range(the_repository, &rebase_fork_point, &curr_head))
die(_("cannot rebase with locally recorded submodule modifications"));
+
if (get_can_ff(&orig_head, &merge_heads.oid[0])) {
/* we can fast-forward this without invoking rebase */
opt_ff = "--ff-only";
- ran_ff = 1;
ret = run_merge();
- }
- if (!ran_ff)
+ } else {
ret = run_rebase(&curr_head, merge_heads.oid, &rebase_fork_point);
+ }
if (!ret && (recurse_submodules == RECURSE_SUBMODULES_ON ||
recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND))
--
2.29.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] pull: move default warning
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
` (2 preceding siblings ...)
2020-11-24 13:30 ` [PATCH 3/6] pull: trivial cleanup Felipe Contreras
@ 2020-11-24 13:30 ` Felipe Contreras
2020-11-24 13:30 ` [PATCH 5/6] pull: display default warning only when non-ff Felipe Contreras
2020-11-24 13:30 ` [PATCH 6/6] test: pull-options: revert unnecessary changes Felipe Contreras
5 siblings, 0 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
Up to the point where can check if we can fast-forward or not.
No functional changes.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin/pull.c | 37 ++++++++++++++++++++++---------------
1 file changed, 22 insertions(+), 15 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index 121b9fb0e1..9a0f7937c2 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -27,6 +27,8 @@
#include "commit-reach.h"
#include "sequencer.h"
+static int default_mode;
+
/**
* Parses the value of --rebase. If value is a false value, returns
* REBASE_FALSE. If value is a true value, returns REBASE_TRUE. If value is
@@ -344,20 +346,7 @@ static enum rebase_type config_get_rebase(void)
if (!git_config_get_value("pull.rebase", &value))
return parse_config_rebase("pull.rebase", value, 1);
- if (opt_verbosity >= 0 && !opt_ff) {
- warning(_("Pulling without specifying how to reconcile divergent branches is\n"
- "discouraged. You can squelch this message by running one of the following\n"
- "commands sometime before your next pull:\n"
- "\n"
- " git config pull.rebase false # merge (the default strategy)\n"
- " git config pull.rebase true # rebase\n"
- " git config pull.ff only # fast-forward only\n"
- "\n"
- "You can replace \"git config\" with \"git config --global\" to set a default\n"
- "preference for all repositories. You can also pass --rebase, --no-rebase,\n"
- "or --ff-only on the command line to override the configured default per\n"
- "invocation.\n"));
- }
+ default_mode = 1;
return REBASE_FALSE;
}
@@ -926,6 +915,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
struct oid_array merge_heads = OID_ARRAY_INIT;
struct object_id orig_head, curr_head;
struct object_id rebase_fork_point;
+ int can_ff;
if (!getenv("GIT_REFLOG_ACTION"))
set_reflog_message(argc, argv);
@@ -1021,6 +1011,23 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
if (opt_rebase && merge_heads.nr > 1)
die(_("Cannot rebase onto multiple branches."));
+ can_ff = get_can_ff(&orig_head, &merge_heads.oid[0]);
+
+ if (default_mode && opt_verbosity >= 0 && !opt_ff) {
+ warning(_("Pulling without specifying how to reconcile divergent branches is\n"
+ "discouraged. You can squelch this message by running one of the following\n"
+ "commands sometime before your next pull:\n"
+ "\n"
+ " git config pull.rebase false # merge (the default strategy)\n"
+ " git config pull.rebase true # rebase\n"
+ " git config pull.ff only # fast-forward only\n"
+ "\n"
+ "You can replace \"git config\" with \"git config --global\" to set a default\n"
+ "preference for all repositories. You can also pass --rebase, --no-rebase,\n"
+ "or --ff-only on the command line to override the configured default per\n"
+ "invocation.\n"));
+ }
+
if (opt_rebase) {
int ret = 0;
if ((recurse_submodules == RECURSE_SUBMODULES_ON ||
@@ -1028,7 +1035,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
submodule_touches_in_range(the_repository, &rebase_fork_point, &curr_head))
die(_("cannot rebase with locally recorded submodule modifications"));
- if (get_can_ff(&orig_head, &merge_heads.oid[0])) {
+ if (can_ff) {
/* we can fast-forward this without invoking rebase */
opt_ff = "--ff-only";
ret = run_merge();
--
2.29.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] pull: display default warning only when non-ff
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
` (3 preceding siblings ...)
2020-11-24 13:30 ` [PATCH 4/6] pull: move default warning Felipe Contreras
@ 2020-11-24 13:30 ` Felipe Contreras
2020-11-24 13:30 ` [PATCH 6/6] test: pull-options: revert unnecessary changes Felipe Contreras
5 siblings, 0 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
There's no need to display the annoying warning on every pull... only
the ones that are not fast-forward.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
builtin/pull.c | 2 +-
t/t7601-merge-pull-config.sh | 8 +++++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/builtin/pull.c b/builtin/pull.c
index 9a0f7937c2..479bdaf0ee 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -1013,7 +1013,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
can_ff = get_can_ff(&orig_head, &merge_heads.oid[0]);
- if (default_mode && opt_verbosity >= 0 && !opt_ff) {
+ if (default_mode && !can_ff && opt_verbosity >= 0 && !opt_ff) {
warning(_("Pulling without specifying how to reconcile divergent branches is\n"
"discouraged. You can squelch this message by running one of the following\n"
"commands sometime before your next pull:\n"
diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh
index c5c4ea5fc0..d79723877b 100755
--- a/t/t7601-merge-pull-config.sh
+++ b/t/t7601-merge-pull-config.sh
@@ -28,11 +28,17 @@ test_expect_success 'setup' '
'
test_expect_success 'pull.rebase not set' '
- git reset --hard c0 &&
+ git reset --hard c2 &&
git pull . c1 2>err &&
test_i18ngrep "Pulling without specifying how to reconcile" err
'
+test_expect_success 'pull.rebase not set (fast-forward)' '
+ git reset --hard c0 &&
+ git pull . c1 2>err &&
+ test_i18ngrep ! "Pulling without specifying how to reconcile" err
+'
+
test_expect_success 'pull.rebase not set and pull.ff=true' '
git reset --hard c0 &&
test_config pull.ff true &&
--
2.29.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] test: pull-options: revert unnecessary changes
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
` (4 preceding siblings ...)
2020-11-24 13:30 ` [PATCH 5/6] pull: display default warning only when non-ff Felipe Contreras
@ 2020-11-24 13:30 ` Felipe Contreras
5 siblings, 0 replies; 7+ messages in thread
From: Felipe Contreras @ 2020-11-24 13:30 UTC (permalink / raw)
To: git
Cc: Vít Ondruch, Alex Henrie, Theodore Y . Ts'o, Jeff King,
Junio C Hamano, Elijah Newren, Felipe Contreras
Commit d18c950a69 changed these tests, but it's unclear why. Probably
because earlier versions of the patch series died instead of printing a
warning.
Cc: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
t/t5521-pull-options.sh | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh
index db1a381cd9..1a4fe2583a 100755
--- a/t/t5521-pull-options.sh
+++ b/t/t5521-pull-options.sh
@@ -11,10 +11,10 @@ test_expect_success 'setup' '
git commit -m one)
'
-test_expect_success 'git pull -q --no-rebase' '
+test_expect_success 'git pull -q' '
mkdir clonedq &&
(cd clonedq && git init &&
- git pull -q --no-rebase "../parent" >out 2>err &&
+ git pull -q "../parent" >out 2>err &&
test_must_be_empty err &&
test_must_be_empty out)
'
@@ -30,10 +30,10 @@ test_expect_success 'git pull -q --rebase' '
test_must_be_empty out)
'
-test_expect_success 'git pull --no-rebase' '
+test_expect_success 'git pull' '
mkdir cloned &&
(cd cloned && git init &&
- git pull --no-rebase "../parent" >out 2>err &&
+ git pull "../parent" >out 2>err &&
test -s err &&
test_must_be_empty out)
'
@@ -46,10 +46,10 @@ test_expect_success 'git pull --rebase' '
test_must_be_empty out)
'
-test_expect_success 'git pull -v --no-rebase' '
+test_expect_success 'git pull -v' '
mkdir clonedv &&
(cd clonedv && git init &&
- git pull -v --no-rebase "../parent" >out 2>err &&
+ git pull -v "../parent" >out 2>err &&
test -s err &&
test_must_be_empty out)
'
@@ -62,25 +62,25 @@ test_expect_success 'git pull -v --rebase' '
test_must_be_empty out)
'
-test_expect_success 'git pull -v -q --no-rebase' '
+test_expect_success 'git pull -v -q' '
mkdir clonedvq &&
(cd clonedvq && git init &&
- git pull -v -q --no-rebase "../parent" >out 2>err &&
+ git pull -v -q "../parent" >out 2>err &&
test_must_be_empty out &&
test_must_be_empty err)
'
-test_expect_success 'git pull -q -v --no-rebase' '
+test_expect_success 'git pull -q -v' '
mkdir clonedqv &&
(cd clonedqv && git init &&
- git pull -q -v --no-rebase "../parent" >out 2>err &&
+ git pull -q -v "../parent" >out 2>err &&
test_must_be_empty out &&
test -s err)
'
test_expect_success 'git pull --cleanup errors early on invalid argument' '
mkdir clonedcleanup &&
(cd clonedcleanup && git init &&
- test_must_fail git pull --no-rebase --cleanup invalid "../parent" >out 2>err &&
+ test_must_fail git pull --cleanup invalid "../parent" >out 2>err &&
test_must_be_empty out &&
test -s err)
'
--
2.29.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-11-24 13:34 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-24 13:30 [PATCH 0/6] pull: improve default warning Felipe Contreras
2020-11-24 13:30 ` [PATCH 1/6] pull: refactor fast-forward check Felipe Contreras
2020-11-24 13:30 ` [PATCH 2/6] pull: cleanup autostash check Felipe Contreras
2020-11-24 13:30 ` [PATCH 3/6] pull: trivial cleanup Felipe Contreras
2020-11-24 13:30 ` [PATCH 4/6] pull: move default warning Felipe Contreras
2020-11-24 13:30 ` [PATCH 5/6] pull: display default warning only when non-ff Felipe Contreras
2020-11-24 13:30 ` [PATCH 6/6] test: pull-options: revert unnecessary changes Felipe Contreras
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).