瀏覽代碼

Merge pull request #437 from anarcat/no-progress

fix --no-progress
TW 9 年之前
父節點
當前提交
f834e335f9
共有 2 個文件被更改,包括 49 次插入13 次删除
  1. 14 13
      borg/archiver.py
  2. 35 0
      borg/testsuite/archiver.py

+ 14 - 13
borg/archiver.py

@@ -35,6 +35,20 @@ from .remote import RepositoryServer, RemoteRepository
 has_lchflags = hasattr(os, 'lchflags')
 has_lchflags = hasattr(os, 'lchflags')
 
 
 
 
+class ToggleAction(argparse.Action):
+    """argparse action to handle "toggle" flags easily
+
+    toggle flags are in the form of ``--foo``, ``--no-foo``.
+
+    the ``--no-foo`` argument still needs to be passed to the
+    ``add_argument()`` call, but it simplifies the ``--no``
+    detection.
+    """
+    def __call__(self, parser, ns, values, option):
+        """set the given flag to true unless ``--no`` is passed"""
+        setattr(ns, self.dest, not option.startswith('--no-'))
+
+
 class Archiver:
 class Archiver:
 
 
     def __init__(self, verbose=False, lock_wait=None):
     def __init__(self, verbose=False, lock_wait=None):
@@ -777,19 +791,6 @@ class Archiver:
         See the output of the "borg help patterns" command for more help on exclude patterns.
         See the output of the "borg help patterns" command for more help on exclude patterns.
         """)
         """)
 
 
-        class ToggleAction(argparse.Action):
-            """argparse action to handle "toggle" flags easily
-
-            toggle flags are in the form of ``--foo``, ``--no-foo``.
-
-            the ``--no-foo`` argument still needs to be passed to the
-            ``add_argument()`` call, but it simplifies the ``--no``
-            detection.
-            """
-            def __call__(self, parser, ns, values, option):
-                """set the given flag to true unless ``--no`` is passed"""
-                setattr(ns, self.dest, option.startswith('--no-'))
-
         subparser = subparsers.add_parser('create', parents=[common_parser],
         subparser = subparsers.add_parser('create', parents=[common_parser],
                                           description=self.do_create.__doc__,
                                           description=self.do_create.__doc__,
                                           epilog=create_epilog,
                                           epilog=create_epilog,

+ 35 - 0
borg/testsuite/archiver.py

@@ -669,6 +669,41 @@ class ArchiverTestCase(ArchiverTestCaseBase):
         manifest, key = Manifest.load(repository)
         manifest, key = Manifest.load(repository)
         self.assert_equal(len(manifest.archives), 0)
         self.assert_equal(len(manifest.archives), 0)
 
 
+    def test_progress(self):
+        self.create_regular_file('file1', size=1024 * 80)
+        self.cmd('init', self.repository_location)
+        # progress forced on
+        output = self.cmd('create', '--progress', self.repository_location + '::test4', 'input')
+        self.assert_in("\r", output)
+        # progress forced off
+        output = self.cmd('create', '--no-progress', self.repository_location + '::test5', 'input')
+        self.assert_not_in("\r", output)
+
+    @unittest.skipUnless(sys.stdout.isatty(), 'need a tty to test auto-detection')
+    def test_progress_tty(self):
+        """test that the --progress and --no-progress flags work,
+        overriding defaults from the terminal auto-detection"""
+        self.create_regular_file('file1', size=1024 * 80)
+        self.cmd('init', self.repository_location)
+        # without a terminal, no progress expected
+        output = self.cmd('create', self.repository_location + '::test1', 'input', fork=False)
+        self.assert_not_in("\r", output)
+        # with a terminal, progress expected
+        output = self.cmd('create', self.repository_location + '::test2', 'input', fork=True)
+        self.assert_in("\r", output)
+        # without a terminal, progress forced on
+        output = self.cmd('create', '--progress', self.repository_location + '::test3', 'input', fork=False)
+        self.assert_in("\r", output)
+        # with a terminal, progress forced on
+        output = self.cmd('create', '--progress', self.repository_location + '::test4', 'input', fork=True)
+        self.assert_in("\r", output)
+        # without a terminal, progress forced off
+        output = self.cmd('create', '--no-progress', self.repository_location + '::test5', 'input', fork=False)
+        self.assert_not_in("\r", output)
+        # with a terminal, progress forced off
+        output = self.cmd('create', '--no-progress', self.repository_location + '::test6', 'input', fork=True)
+        self.assert_not_in("\r", output)
+
     def test_cmdline_compatibility(self):
     def test_cmdline_compatibility(self):
         self.create_regular_file('file1', size=1024 * 80)
         self.create_regular_file('file1', size=1024 * 80)
         self.cmd('init', self.repository_location)
         self.cmd('init', self.repository_location)