Patchwork [1,of,2] push: hide description about "-f" in the hint to prevent from using it easily

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Aug. 29, 2013, 12:31 p.m.
Message ID <7cee001f451b6a097ed7.1377779465@feefifofum>
Download mbox | patch
Permalink /patch/2288/
State Superseded
Headers show

Comments

Katsunori FUJIWARA - Aug. 29, 2013, 12:31 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1377777067 -32400
#      Thu Aug 29 20:51:07 2013 +0900
# Node ID 7cee001f451b6a097ed754db1a988d1035362eaf
# Parent  d4a0055af149cdea20b3136b66cae8a24b2e2a98
push: hide description about "-f" in the hint to prevent from using it easily

"use push -f to force" in the hint at abortion of "hg push" may cause
novice users to execute "push -f" easily without understanding about
problems of multiple branch heads in the repository.

This patch hides description about "-f" in the hint, and leads into
seeing "hg help push" for detail about pushing.

This patch also recommends to ask the management policy of the
destination repository before using "-f".
Angel Ezquerra - Aug. 29, 2013, 12:47 p.m.
On Thu, Aug 29, 2013 at 2:31 PM, FUJIWARA Katsunori
<foozy@lares.dti.ne.jp> wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1377777067 -32400
> #      Thu Aug 29 20:51:07 2013 +0900
> # Node ID 7cee001f451b6a097ed754db1a988d1035362eaf
> # Parent  d4a0055af149cdea20b3136b66cae8a24b2e2a98
> push: hide description about "-f" in the hint to prevent from using it easily
>
> "use push -f to force" in the hint at abortion of "hg push" may cause
> novice users to execute "push -f" easily without understanding about
> problems of multiple branch heads in the repository.
>
> This patch hides description about "-f" in the hint, and leads into
> seeing "hg help push" for detail about pushing.
>
> This patch also recommends to ask the management policy of the
> destination repository before using "-f".
>
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -4648,7 +4648,9 @@
>      only create a new branch without forcing other changes.
>
>      Use -f/--force to override the default behavior and push all
> -    changesets on all branches.
> +    changesets on all branches. Before using --force, it is
> +    recommended to ask the administrator of the destination repository
> +    for the management policy of it.
>
>      If -r/--rev is used, the specified revision and all its ancestors
>      will be pushed to the remote repository.
> diff --git a/mercurial/discovery.py b/mercurial/discovery.py
> --- a/mercurial/discovery.py
> +++ b/mercurial/discovery.py
> @@ -323,10 +323,10 @@
>                                ) % short(dhs[0])
>                  if heads[2]: # unsynced
>                      hint = _("you should pull and merge or "
> -                             "use push -f to force")
> +                             "see \"hg help push\" for detail about pushing")
>                  else:
>                      hint = _("did you forget to merge? "
> -                             "use push -f to force")
> +                             "see \"hg help push\" for detail about pushing")
>              if branch is not None:
>                  repo.ui.note(_("new remote heads on branch '%s'\n") % branch)
>              for h in dhs:
> diff --git a/tests/test-bookmarks-pushpull.t b/tests/test-bookmarks-pushpull.t
> --- a/tests/test-bookmarks-pushpull.t
> +++ b/tests/test-bookmarks-pushpull.t
> @@ -275,7 +275,7 @@
>    pushing to http://localhost:$HGPORT2/
>    searching for changes
>    abort: push creates new remote head c922c0139ca0!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>    $ hg -R ../a book
>       @                         1:0d2164f0ce0d
> @@ -291,7 +291,7 @@
>    pushing to http://localhost:$HGPORT2/
>    searching for changes
>    abort: push creates new remote head c922c0139ca0!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>    $ hg -R ../a book
>       @                         1:0d2164f0ce0d
> diff --git a/tests/test-obsolete-checkheads.t b/tests/test-obsolete-checkheads.t
> --- a/tests/test-obsolete-checkheads.t
> +++ b/tests/test-obsolete-checkheads.t
> @@ -98,7 +98,7 @@
>    pushing to $TESTTMP/remote (glob)
>    searching for changes
>    abort: push creates new remote head 71e3228bffe1!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>  old head is now public (public remote version)
> @@ -127,7 +127,7 @@
>  #   pushing to $TESTTMP/remote
>  #   searching for changes
>  #   abort: push creates new remote head 71e3228bffe1!
> -#   (did you forget to merge? use push -f to force)
> +#   (did you forget to merge? see "hg help push" for detail about pushing)
>  #   [255]
>
>  old head is obsolete but replacement is not pushed
> @@ -158,7 +158,7 @@
>    pushing to $TESTTMP/remote (glob)
>    searching for changes
>    abort: push creates new remote head d7d41ccbd4de!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>
> diff --git a/tests/test-phases-exchange.t b/tests/test-phases-exchange.t
> --- a/tests/test-phases-exchange.t
> +++ b/tests/test-phases-exchange.t
> @@ -844,7 +844,7 @@
>    pushing to ../mu
>    searching for changes
>    abort: push creates new remote head 435b5d83910c!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>    $ hg push -fr 435b5d83910c ../mu # because the push will create new visible head
>    pushing to ../mu
> diff --git a/tests/test-push-warn.t b/tests/test-push-warn.t
> --- a/tests/test-push-warn.t
> +++ b/tests/test-push-warn.t
> @@ -26,7 +26,7 @@
>    pushing to ../a
>    searching for changes
>    abort: push creates new remote head 1e108cc5548c!
> -  (you should pull and merge or use push -f to force)
> +  (you should pull and merge or see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg push --debug ../a
> @@ -41,7 +41,7 @@
>    new remote heads on branch 'default'
>    new remote head 1e108cc5548c
>    abort: push creates new remote head 1e108cc5548c!
> -  (you should pull and merge or use push -f to force)
> +  (you should pull and merge or see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg pull ../a
> @@ -57,7 +57,7 @@
>    pushing to ../a
>    searching for changes
>    abort: push creates new remote head 1e108cc5548c!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg merge
> @@ -110,7 +110,7 @@
>    pushing to ../c
>    searching for changes
>    abort: push creates new remote head 6346d66eb9f5!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg push -r 2 ../c
> @@ -123,7 +123,7 @@
>    pushing to ../c
>    searching for changes
>    abort: push creates new remote head a5dda829a167!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg push -v -r 3 -r 4 ../c
> @@ -133,7 +133,7 @@
>    new remote head a5dda829a167
>    new remote head ee8fbc7a0295
>    abort: push creates new remote head a5dda829a167!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg push -v -f -r 3 -r 4 ../c
> @@ -263,7 +263,7 @@
>    pushing to ../f
>    searching for changes
>    abort: push creates new remote head 0b715ef6ff8f on branch 'a'!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>  Push replacement head on existing branches:
> @@ -386,7 +386,7 @@
>    pushing to h
>    searching for changes
>    abort: push creates new remote head 97bd0c84d346!
> -  (you should pull and merge or use push -f to force)
> +  (you should pull and merge or see "hg help push" for detail about pushing)
>    [255]
>
>
> @@ -458,7 +458,7 @@
>    pushing to ../l
>    searching for changes
>    abort: push creates new remote head 451211cc22b0 on branch 'a'!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ cd ..
> @@ -713,14 +713,14 @@
>    pushing to inner
>    searching for changes
>    abort: push creates new remote head 7d0f4fb6cf04 on branch 'A'!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg push inner -r4 -r5
>    pushing to inner
>    searching for changes
>    abort: push creates new remote head 7d0f4fb6cf04 on branch 'A'!
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>
>    $ hg in inner
> diff --git a/tests/test-subrepo.t b/tests/test-subrepo.t
> --- a/tests/test-subrepo.t
> +++ b/tests/test-subrepo.t
> @@ -314,7 +314,7 @@
>    pushing subrepo s to $TESTTMP/t/s
>    searching for changes
>    abort: push creates new remote head 12a213df6fa9! (in subrepo s)
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>    $ hg push -f
>    pushing to $TESTTMP/t (glob)
> @@ -711,7 +711,7 @@
>    $ hg -R repo2 ci -m3
>    $ hg -q -R repo2 push
>    abort: push creates new remote head cc505f09a8b2! (in subrepo s)
> -  (did you forget to merge? use push -f to force)
> +  (did you forget to merge? see "hg help push" for detail about pushing)
>    [255]
>    $ hg -R repo update
>    0 files updated, 0 files merged, 0 files removed, 0 files unresolved


I would change:

"see "hg help push" for detail about pushing"

into:

"see "hg help push" for detail about pushing multiple heads"

On the hg push --help text I would also explicitly say that pushing
multiple heads is usually a mistake and should not be done unless
extrictly necessary. That is, I would change:

      Use -f/--force to override the default behavior and push all
-    changesets on all branches.
+    changesets on all branches. Before using --force, it is
+    recommended to ask the administrator of the destination repository
+    for the management policy of it.

into:

      Use -f/--force to override the default behavior and push all
-    changesets on all branches.
+    changesets on all branches. Before using --force, it is
+    recommended to ask the administrator of the destination repository
+    for the management policy of it. Pushing multiple heads in particular
+    is usually a mistake.

Or something of the sort.

Cheers,

Angel
Stephen Lee - Sept. 6, 2013, 4:02 a.m.
> Currently when you're using bookmarks, push --force is the _only_ way to get a new head pushed even if it's bookmarked. So until I get back to that patch that allows push -B to create new heads (*cough*), I'm -1 on this.


Would you be talking about the RFC patch I sent in March?
http://markmail.org/message/f36dtpcmxawww5kw
I would like this to go into core, I've been running it on our patched
Mercurial for several months now.
The only remaining issue is the way the patch stores the explicitly
named bookmarks in ui.config to avoid changing the signature of
repo.push.
Any ideas of how else this can be done?

Steve

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4648,7 +4648,9 @@ 
     only create a new branch without forcing other changes.
 
     Use -f/--force to override the default behavior and push all
-    changesets on all branches.
+    changesets on all branches. Before using --force, it is
+    recommended to ask the administrator of the destination repository
+    for the management policy of it.
 
     If -r/--rev is used, the specified revision and all its ancestors
     will be pushed to the remote repository.
diff --git a/mercurial/discovery.py b/mercurial/discovery.py
--- a/mercurial/discovery.py
+++ b/mercurial/discovery.py
@@ -323,10 +323,10 @@ 
                               ) % short(dhs[0])
                 if heads[2]: # unsynced
                     hint = _("you should pull and merge or "
-                             "use push -f to force")
+                             "see \"hg help push\" for detail about pushing")
                 else:
                     hint = _("did you forget to merge? "
-                             "use push -f to force")
+                             "see \"hg help push\" for detail about pushing")
             if branch is not None:
                 repo.ui.note(_("new remote heads on branch '%s'\n") % branch)
             for h in dhs:
diff --git a/tests/test-bookmarks-pushpull.t b/tests/test-bookmarks-pushpull.t
--- a/tests/test-bookmarks-pushpull.t
+++ b/tests/test-bookmarks-pushpull.t
@@ -275,7 +275,7 @@ 
   pushing to http://localhost:$HGPORT2/
   searching for changes
   abort: push creates new remote head c922c0139ca0!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
   $ hg -R ../a book
      @                         1:0d2164f0ce0d
@@ -291,7 +291,7 @@ 
   pushing to http://localhost:$HGPORT2/
   searching for changes
   abort: push creates new remote head c922c0139ca0!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
   $ hg -R ../a book
      @                         1:0d2164f0ce0d
diff --git a/tests/test-obsolete-checkheads.t b/tests/test-obsolete-checkheads.t
--- a/tests/test-obsolete-checkheads.t
+++ b/tests/test-obsolete-checkheads.t
@@ -98,7 +98,7 @@ 
   pushing to $TESTTMP/remote (glob)
   searching for changes
   abort: push creates new remote head 71e3228bffe1!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
 old head is now public (public remote version)
@@ -127,7 +127,7 @@ 
 #   pushing to $TESTTMP/remote
 #   searching for changes
 #   abort: push creates new remote head 71e3228bffe1!
-#   (did you forget to merge? use push -f to force)
+#   (did you forget to merge? see "hg help push" for detail about pushing)
 #   [255]
 
 old head is obsolete but replacement is not pushed
@@ -158,7 +158,7 @@ 
   pushing to $TESTTMP/remote (glob)
   searching for changes
   abort: push creates new remote head d7d41ccbd4de!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
 
diff --git a/tests/test-phases-exchange.t b/tests/test-phases-exchange.t
--- a/tests/test-phases-exchange.t
+++ b/tests/test-phases-exchange.t
@@ -844,7 +844,7 @@ 
   pushing to ../mu
   searching for changes
   abort: push creates new remote head 435b5d83910c!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
   $ hg push -fr 435b5d83910c ../mu # because the push will create new visible head
   pushing to ../mu
diff --git a/tests/test-push-warn.t b/tests/test-push-warn.t
--- a/tests/test-push-warn.t
+++ b/tests/test-push-warn.t
@@ -26,7 +26,7 @@ 
   pushing to ../a
   searching for changes
   abort: push creates new remote head 1e108cc5548c!
-  (you should pull and merge or use push -f to force)
+  (you should pull and merge or see "hg help push" for detail about pushing)
   [255]
 
   $ hg push --debug ../a
@@ -41,7 +41,7 @@ 
   new remote heads on branch 'default'
   new remote head 1e108cc5548c
   abort: push creates new remote head 1e108cc5548c!
-  (you should pull and merge or use push -f to force)
+  (you should pull and merge or see "hg help push" for detail about pushing)
   [255]
 
   $ hg pull ../a
@@ -57,7 +57,7 @@ 
   pushing to ../a
   searching for changes
   abort: push creates new remote head 1e108cc5548c!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ hg merge
@@ -110,7 +110,7 @@ 
   pushing to ../c
   searching for changes
   abort: push creates new remote head 6346d66eb9f5!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ hg push -r 2 ../c
@@ -123,7 +123,7 @@ 
   pushing to ../c
   searching for changes
   abort: push creates new remote head a5dda829a167!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ hg push -v -r 3 -r 4 ../c
@@ -133,7 +133,7 @@ 
   new remote head a5dda829a167
   new remote head ee8fbc7a0295
   abort: push creates new remote head a5dda829a167!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ hg push -v -f -r 3 -r 4 ../c
@@ -263,7 +263,7 @@ 
   pushing to ../f
   searching for changes
   abort: push creates new remote head 0b715ef6ff8f on branch 'a'!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
 Push replacement head on existing branches:
@@ -386,7 +386,7 @@ 
   pushing to h
   searching for changes
   abort: push creates new remote head 97bd0c84d346!
-  (you should pull and merge or use push -f to force)
+  (you should pull and merge or see "hg help push" for detail about pushing)
   [255]
 
 
@@ -458,7 +458,7 @@ 
   pushing to ../l
   searching for changes
   abort: push creates new remote head 451211cc22b0 on branch 'a'!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ cd ..
@@ -713,14 +713,14 @@ 
   pushing to inner
   searching for changes
   abort: push creates new remote head 7d0f4fb6cf04 on branch 'A'!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ hg push inner -r4 -r5
   pushing to inner
   searching for changes
   abort: push creates new remote head 7d0f4fb6cf04 on branch 'A'!
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
 
   $ hg in inner
diff --git a/tests/test-subrepo.t b/tests/test-subrepo.t
--- a/tests/test-subrepo.t
+++ b/tests/test-subrepo.t
@@ -314,7 +314,7 @@ 
   pushing subrepo s to $TESTTMP/t/s
   searching for changes
   abort: push creates new remote head 12a213df6fa9! (in subrepo s)
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
   $ hg push -f
   pushing to $TESTTMP/t (glob)
@@ -711,7 +711,7 @@ 
   $ hg -R repo2 ci -m3
   $ hg -q -R repo2 push
   abort: push creates new remote head cc505f09a8b2! (in subrepo s)
-  (did you forget to merge? use push -f to force)
+  (did you forget to merge? see "hg help push" for detail about pushing)
   [255]
   $ hg -R repo update
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved