@@ -125,8 +125,8 @@ def do_create(self, args):
125125 continue
126126 else :
127127 restrict_dev = None
128- self ._process (archive , cache , args .excludes , args .exclude_caches ,
129- args .exclude_if_present , skip_inodes , path , restrict_dev )
128+ self ._process (archive , cache , args .excludes , args .exclude_caches , args . exclude_if_present ,
129+ args .keep_tag_files , skip_inodes , path , restrict_dev )
130130 archive .save ()
131131 if args .stats :
132132 t = datetime .now ()
@@ -143,7 +143,7 @@ def do_create(self, args):
143143 return self .exit_code
144144
145145 def _process (self , archive , cache , excludes , exclude_caches , exclude_if_present ,
146- skip_inodes , path , restrict_dev ):
146+ keep_tag_files , skip_inodes , path , restrict_dev ):
147147 if exclude_path (path , excludes ):
148148 return
149149 try :
@@ -166,7 +166,11 @@ def _process(self, archive, cache, excludes, exclude_caches, exclude_if_present,
166166 except IOError as e :
167167 self .print_error ('%s: %s' , path , e )
168168 elif stat .S_ISDIR (st .st_mode ):
169- if dir_is_tagged (path , exclude_caches , exclude_if_present ):
169+ tag_path = dir_is_tagged (path , exclude_caches , exclude_if_present )
170+ if tag_path :
171+ if keep_tag_files :
172+ archive .process_item (path , st )
173+ archive .process_item (tag_path , st )
170174 return
171175 archive .process_item (path , st )
172176 try :
@@ -176,7 +180,7 @@ def _process(self, archive, cache, excludes, exclude_caches, exclude_if_present,
176180 else :
177181 for filename in sorted (entries ):
178182 self ._process (archive , cache , excludes , exclude_caches , exclude_if_present ,
179- skip_inodes , os .path .join (path , filename ), restrict_dev )
183+ keep_tag_files , skip_inodes , os .path .join (path , filename ), restrict_dev )
180184 elif stat .S_ISLNK (st .st_mode ):
181185 archive .process_symlink (path , st )
182186 elif stat .S_ISFIFO (st .st_mode ):
@@ -546,6 +550,9 @@ def run(self, args=None):
546550 subparser .add_argument ('--exclude-if-present' , dest = 'exclude_if_present' ,
547551 metavar = 'FILENAME' , action = 'append' , type = str ,
548552 help = 'exclude directories that contain the specified file' )
553+ subparser .add_argument ('--keep-tag-files' , dest = 'keep_tag_files' ,
554+ action = 'store_true' , default = False ,
555+ help = 'keep tag files of excluded caches/directories' )
549556 subparser .add_argument ('-c' , '--checkpoint-interval' , dest = 'checkpoint_interval' ,
550557 type = int , default = 300 , metavar = 'SECONDS' ,
551558 help = 'write checkpoint every SECONDS seconds (Default: 300)' )
0 commit comments