[PATCH fixed] commands: move bundle type validation earlier

Bryan O'Sullivan bos at serpentine.com
Fri Apr 13 13:01:41 CDT 2012


# HG changeset patch
# User Bryan O'Sullivan <bryano at fb.com>
# Date 1334340067 25200
# Node ID 189952015337e2a15a9ef87cc87d117485eebb80
# Parent  0b29e73127720e495aaa207e84aaec5c6307c848
commands: move bundle type validation earlier

Checking the bundle type late in the command's execution can mean
that we do work for a long time before complaining about incorrect
user input and aborting.  Guess how I discovered this.

diff -r 0b29e7312772 -r 189952015337 mercurial/commands.py
--- a/mercurial/commands.py	Fri Apr 13 09:26:26 2012 -0700
+++ b/mercurial/commands.py	Fri Apr 13 11:01:07 2012 -0700
@@ -972,6 +972,12 @@
     if 'rev' in opts:
         revs = scmutil.revrange(repo, opts['rev'])
 
+    bundletype = opts.get('type', 'bzip2').lower()
+    btypes = {'none': 'HG10UN', 'bzip2': 'HG10BZ', 'gzip': 'HG10GZ'}
+    bundletype = btypes.get(bundletype)
+    if bundletype not in changegroup.bundletypes:
+        raise util.Abort(_('unknown bundle type specified with --type'))
+
     if opts.get('all'):
         base = ['null']
     else:
@@ -998,12 +1004,6 @@
         scmutil.nochangesfound(ui, outgoing and outgoing.excluded)
         return 1
 
-    bundletype = opts.get('type', 'bzip2').lower()
-    btypes = {'none': 'HG10UN', 'bzip2': 'HG10BZ', 'gzip': 'HG10GZ'}
-    bundletype = btypes.get(bundletype)
-    if bundletype not in changegroup.bundletypes:
-        raise util.Abort(_('unknown bundle type specified with --type'))
-
     changegroup.writebundle(cg, fname, bundletype)
 
 @command('cat',
diff -r 0b29e7312772 -r 189952015337 tests/test-bundle-type.t
--- a/tests/test-bundle-type.t	Fri Apr 13 09:26:26 2012 -0700
+++ b/tests/test-bundle-type.t	Fri Apr 13 11:01:07 2012 -0700
@@ -95,7 +95,6 @@
 
   $ cd t1
   $ hg bundle -a -t garbage ../bgarbage
-  1 changesets found
   abort: unknown bundle type specified with --type
   [255]
   $ cd ..


More information about the Mercurial-devel mailing list