|  | @@ -9,7 +9,7 @@ from .store import Store
 | 
	
		
			
				|  |  |  from .cache import Cache
 | 
	
		
			
				|  |  |  from .keychain import Keychain
 | 
	
		
			
				|  |  |  from .helpers import location_validator, format_file_size, format_time,\
 | 
	
		
			
				|  |  | -    format_file_mode, walk_path, IncludePattern, ExcludePattern, exclude_path
 | 
	
		
			
				|  |  | +    format_file_mode, IncludePattern, ExcludePattern, exclude_path
 | 
	
		
			
				|  |  |  from .remote import StoreServer, RemoteStore
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class Archiver(object):
 | 
	
	
		
			
				|  | @@ -74,27 +74,42 @@ class Archiver(object):
 | 
	
		
			
				|  |  |              except IOError:
 | 
	
		
			
				|  |  |                  pass
 | 
	
		
			
				|  |  |          for path in args.paths:
 | 
	
		
			
				|  |  | -            for path, st in walk_path(unicode(path)):
 | 
	
		
			
				|  |  | -                if exclude_path(path, args.patterns):
 | 
	
		
			
				|  |  | -                    continue
 | 
	
		
			
				|  |  | -                self.print_verbose(path)
 | 
	
		
			
				|  |  | -                if stat.S_ISDIR(st.st_mode):
 | 
	
		
			
				|  |  | -                    archive.process_dir(path, st)
 | 
	
		
			
				|  |  | -                elif stat.S_ISLNK(st.st_mode):
 | 
	
		
			
				|  |  | -                    archive.process_symlink(path, st)
 | 
	
		
			
				|  |  | -                elif stat.S_ISFIFO(st.st_mode):
 | 
	
		
			
				|  |  | -                    archive.process_fifo(path, st)
 | 
	
		
			
				|  |  | -                elif stat.S_ISREG(st.st_mode):
 | 
	
		
			
				|  |  | -                    try:
 | 
	
		
			
				|  |  | -                        archive.process_file(path, st, cache)
 | 
	
		
			
				|  |  | -                    except IOError, e:
 | 
	
		
			
				|  |  | -                        self.print_error('%s: %s', path, e)
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    self.print_error('Unknown file type: %s', path)
 | 
	
		
			
				|  |  | +            self._process(archive, cache, args.patterns, unicode(path))
 | 
	
		
			
				|  |  |          archive.save(args.archive.archive)
 | 
	
		
			
				|  |  |          cache.save()
 | 
	
		
			
				|  |  |          return self.exit_code
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def _process(self, archive, cache, patterns, path):
 | 
	
		
			
				|  |  | +        if exclude_path(path, patterns):
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            st = os.lstat(path)
 | 
	
		
			
				|  |  | +        except OSError, e:
 | 
	
		
			
				|  |  | +            self.print_error('%s: %s', path, e)
 | 
	
		
			
				|  |  | +            return
 | 
	
		
			
				|  |  | +        self.print_verbose(path)
 | 
	
		
			
				|  |  | +        if stat.S_ISDIR(st.st_mode):
 | 
	
		
			
				|  |  | +            archive.process_dir(path, st)
 | 
	
		
			
				|  |  | +            try:
 | 
	
		
			
				|  |  | +                entries = os.listdir(path)
 | 
	
		
			
				|  |  | +            except OSError, e:
 | 
	
		
			
				|  |  | +                self.print_error('%s: %s', path, e)
 | 
	
		
			
				|  |  | +            else:
 | 
	
		
			
				|  |  | +                for filename in entries:
 | 
	
		
			
				|  |  | +                    self._process(archive, cache, patterns,
 | 
	
		
			
				|  |  | +                                  os.path.join(path, filename))
 | 
	
		
			
				|  |  | +        elif stat.S_ISLNK(st.st_mode):
 | 
	
		
			
				|  |  | +            archive.process_symlink(path, st)
 | 
	
		
			
				|  |  | +        elif stat.S_ISFIFO(st.st_mode):
 | 
	
		
			
				|  |  | +            archive.process_fifo(path, st)
 | 
	
		
			
				|  |  | +        elif stat.S_ISREG(st.st_mode):
 | 
	
		
			
				|  |  | +            try:
 | 
	
		
			
				|  |  | +                archive.process_file(path, st, cache)
 | 
	
		
			
				|  |  | +            except IOError, e:
 | 
	
		
			
				|  |  | +                self.print_error('%s: %s', path, e)
 | 
	
		
			
				|  |  | +        else:
 | 
	
		
			
				|  |  | +            self.print_error('Unknown file type: %s', path)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def do_extract(self, args):
 | 
	
		
			
				|  |  |          store = self.open_store(args.archive)
 | 
	
		
			
				|  |  |          keychain = Keychain(args.keychain)
 |