| 
														
															@@ -17,6 +17,7 @@ import traceback 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from . import __version__ 
														 | 
														
														 | 
														
															 from . import __version__ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from .archive import Archive, ArchiveChecker, CHUNKER_PARAMS 
														 | 
														
														 | 
														
															 from .archive import Archive, ArchiveChecker, CHUNKER_PARAMS 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from .compress import Compressor, COMPR_BUFFER 
														 | 
														
														 | 
														
															 from .compress import Compressor, COMPR_BUFFER 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+from .converter import AtticRepositoryConverter, NotImplementedException 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from .repository import Repository 
														 | 
														
														 | 
														
															 from .repository import Repository 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from .cache import Cache 
														 | 
														
														 | 
														
															 from .cache import Cache 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from .key import key_creator 
														 | 
														
														 | 
														
															 from .key import key_creator 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -462,6 +463,15 @@ Type "Yes I am sure" if you understand this and want to continue.\n""") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             stats.print_('Deleted data:', cache) 
														 | 
														
														 | 
														
															             stats.print_('Deleted data:', cache) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return self.exit_code 
														 | 
														
														 | 
														
															         return self.exit_code 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    def do_convert(self, parser, commands, args): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        '''convert a repository from attic to borg''' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        repo = AtticRepositoryConverter(os.path.join(args.repository, 'repository'), create=False) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            repo.convert(args.dry_run) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        except NotImplementedException as e: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            print("warning: %s" % e) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        return self.exit_code 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     helptext = {} 
														 | 
														
														 | 
														
															     helptext = {} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     helptext['patterns'] = ''' 
														 | 
														
														 | 
														
															     helptext['patterns'] = ''' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         Exclude patterns use a variant of shell pattern syntax, with '*' matching any 
														 | 
														
														 | 
														
															         Exclude patterns use a variant of shell pattern syntax, with '*' matching any 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -896,6 +906,43 @@ Type "Yes I am sure" if you understand this and want to continue.\n""") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                                type=location_validator(archive=False), 
														 | 
														
														 | 
														
															                                type=location_validator(archive=False), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                                help='repository to prune') 
														 | 
														
														 | 
														
															                                help='repository to prune') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        convert_epilog = textwrap.dedent(""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        convert will convert an existing Attic repository to Borg in place. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        it will change the magic numbers in the repository's segments 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        to match the new Borg magic numbers. the keyfiles found in 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        $ATTIC_KEYS_DIR or ~/.attic/keys/ will also be converted and 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        copied to $BORG_KEYS_DIR or ~/.borg/keys. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        the cache files are *not* currently converted, which will 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        result in a much longer backup the first time. you can run 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        `borg check --repair` to rebuild those files after the 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        conversion. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        the conversion can IRREMEDIABLY DAMAGE YOUR REPOSITORY! Attic 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        will also NOT BE ABLE TO READ THE BORG REPOSITORY ANYMORE, as 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        the magic numbers will have changed. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        it is recommended you run this on a copy of the Attic 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        repository, in case something goes wrong, for example: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        cp -a attic borg 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        borg convert -n borg 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        borg convert borg 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        you have been warned.""") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        subparser = subparsers.add_parser('convert', parents=[common_parser], 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                                          description=self.do_convert.__doc__, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                                          epilog=convert_epilog, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                                          formatter_class=argparse.RawDescriptionHelpFormatter) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        subparser.set_defaults(func=self.do_convert) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        subparser.add_argument('-n', '--dry-run', dest='dry_run', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                               default=False, action='store_true', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                               help='do not change repository') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        subparser.add_argument('repository', metavar='REPOSITORY', nargs='?', default='', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                               type=location_validator(archive=False), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                               help='path to the attic repository to be converted') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         subparser = subparsers.add_parser('help', parents=[common_parser], 
														 | 
														
														 | 
														
															         subparser = subparsers.add_parser('help', parents=[common_parser], 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                                           description='Extra help') 
														 | 
														
														 | 
														
															                                           description='Extra help') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         subparser.add_argument('--epilog-only', dest='epilog_only', 
														 | 
														
														 | 
														
															         subparser.add_argument('--epilog-only', dest='epilog_only', 
														 |