29
29
directory and notes any that have been modified, are missing, or which have
30
30
changed type. It is run, for example, but the "stdhome status" comand.
32
Walker source: home dir
33
Walker destination: repo
34
Walker traversing: repo
33
Walker destination: home dir
34
Walker traversing: repo (unless a walk list is provided)
38
self.src_dir = the.full_fsdir
39
self.dst_dir = the.repo.full_dir
40
self.walk_list = self.generate_walk_list( the.repo.full_dir )
37
def __init__( self, walk_list = None ):
38
self.src_dir = the.repo.full_dir
39
self.dst_dir = the.full_home_dir
40
self.walk_list = walk_list if walk_list is not None else \
41
self.generate_walk_list( the.repo.full_dir )
42
43
self.modified = list()
43
44
self.missing = list()
44
45
self.changed = list()
47
def process( self, rel_file, src_file, src_type, dst_file, dst_type ):
48
def process( self, rel_file, src, dst ):
49
50
# entity is missing in home dir?
51
self.missing.append( rel_file )
52
if the.verbose >= 2: print " _|%s %s" % ( dst.type, rel_file )
53
if not the.config.ignores.matches( rel_file ):
54
self.missing.append( rel_file )
53
56
# if a directory is missing in the home dir, we only really want to
54
57
# hear about that and not all the files it contains (which are also
58
61
# entity has changed type?
59
elif src_type != dst_type:
60
self.changed.append( "%s (now %s)" % (
61
rel_file, self.name_of_type( src_type ) ) )
62
elif dst.get_type_name() != src.get_type_name():
64
# is it a directory that has changed to a symlnik to a directory and
65
# is an acceptable substitution?
66
if src.type == 'd' and dst.link_type == 'd' and \
67
the.config.symlinks.matches( rel_file ):
68
if the.verbose >= 2: print " d@d " + rel_file
72
print " %s|%s %s" % ( dst.type, src.type, rel_file )
73
if not the.config.ignores.matches( rel_file ):
74
self.changed.append( "%s (%s => %s)" % (
75
rel_file, src.get_type_name(), dst.get_type_name() ) )
63
77
# if an entity has changed to/from a directory, we don't care about
64
78
# anything that directory does/did contain
67
# entity has been modified?
81
# entity is a file that has been modified?
83
if not filecmp.cmp( src.file, dst.file ):
84
if the.verbose >= 2: print " f|f " + rel_file
85
if not the.config.ignores.matches( rel_file ):
86
self.modified.append( rel_file )
88
if the.verbose >= 2: print " f=f " + rel_file
91
# entity is a symlink that has been modified?
93
if os.readlink( src.file ) != os.readlink( dst.file ):
94
if the.verbose >= 2: print " l|l " + rel_file
95
if not the.config.ignores.matches( rel_file ):
96
self.modified.append( rel_file )
98
if the.verbose >= 2: print " l=l " + rel_file
68
101
# TODO: check directory permission changes
70
if not filecmp.cmp( src_file, dst_file ):
71
self.modified.append( rel_file )
73
if os.readlink( src_file ) != os.readlink( dst_file ):
74
self.modified.append( rel_file )
76
103
# nothing to see here
105
print " %s=%s %s" % ( dst.type, src.type, rel_file )