소스 검색

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)