changeset 5375:bed4fc158fc9

topic: treat argument to --topic as a literal topic name explicitly We already do treat it as a string (i.e. not a special revset language symbol) that needs to be escaped, because we use %s in repo.revs(), which escapes and single-quotes the appropriate argument. But now we abort in case user supplies topic name that doesn't exist. Before this patch, when user ran something like `hg push --topic .`, this code would use 'topic(".") - obsolete()' revset, which would get an empty set from repo.revs() unless there was a topic named "." (unlikely, because this name is reserved). This code would then add an empty set to the 'rev' argument of the original hg push command. And `hg push` without -r will try and push everything, and not just changesets on a specific topic.
author Anton Shestakov <av6@dwimlabs.net>
date Thu, 11 Jun 2020 18:50:29 +0800
parents 6f7a2dcc8c7a
children 7681e3c2237a
files CHANGELOG hgext3rd/topic/__init__.py tests/test-topic-push.t
diffstat 3 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGELOG	Thu Jun 11 17:58:04 2020 +0800
+++ b/CHANGELOG	Thu Jun 11 18:50:29 2020 +0800
@@ -7,6 +7,8 @@
 topic (0.20.0)
 
   * stack: support foo#stack relation revset (hg-5.4+ only)
+  * topic: hg push --topic does-not-exist now doesn't try to push unrelated
+    changesets and aborts instead
 
 10.0.0 -- 2020-05-09
 --------------------
--- a/hgext3rd/topic/__init__.py	Thu Jun 11 17:58:04 2020 +0800
+++ b/hgext3rd/topic/__init__.py	Thu Jun 11 18:50:29 2020 +0800
@@ -1269,7 +1269,8 @@
 
 def pushoutgoingwrap(orig, ui, repo, *args, **opts):
     if opts.get('topic'):
-        topicrevs = repo.revs(b'topic(%s) - obsolete()', opts['topic'])
+        topic = b'literal:' + opts['topic']
+        topicrevs = repo.revs(b'topic(%s) - obsolete()', topic)
         opts.setdefault('rev', []).extend(topicrevs)
     return orig(ui, repo, *args, **opts)
 
--- a/tests/test-topic-push.t	Thu Jun 11 17:58:04 2020 +0800
+++ b/tests/test-topic-push.t	Thu Jun 11 18:50:29 2020 +0800
@@ -208,6 +208,14 @@
   |/
   o  0 default  public CA
   
+
+  $ hg outgoing draft --topic nonexistent
+  abort: topic 'nonexistent' does not exist!
+  [255]
+  $ hg push draft --topic nonexistent
+  abort: topic 'nonexistent' does not exist!
+  [255]
+
   $ hg outgoing draft --topic babar
   comparing with $TESTTMP/draft
   searching for changes