/stdhome

To get this branch, use:
bzr branch http://bzr.ed.am/stdhome

« back to all changes in this revision

Viewing changes to lib/stdhome/walker/status.py

  • Committer: Tim Marston
  • Date: 2021-09-01 12:28:59 UTC
  • Revision ID: tim@ed.am-20210901122859-tkvlmry7hef8ahwc
moved bzr -> brz

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 
21
21
 
22
22
import filecmp, os
23
 
from walker import Walker
 
23
from .walker import Walker
24
24
import stdhome.the as the
25
25
 
26
26
 
45
45
                self.changed = list()
46
46
 
47
47
 
48
 
        def process( self, rel_file, src_file, src_type, dst_file, dst_type ):
 
48
        def process( self, rel_file, src, dst ):
49
49
 
50
50
                # entity is missing in home dir?
51
 
                if dst_type == '_':
52
 
                        self.missing.append( rel_file )
 
51
                if dst.type == '_':
 
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
55
 
54
56
                        # if a directory is missing in the home dir, we only really want to
55
57
                        # hear about that and not all the files it contains (which are also
57
59
                        return False
58
60
 
59
61
                # entity has changed type?
60
 
                elif dst_type != src_type:
61
 
                        self.changed.append( "%s (%s => %s)" % ( rel_file,
62
 
                                self.name_of_type( src_type ), self.name_of_type( dst_type ) )
 
62
                elif dst.get_type_name() != src.get_type_name():
 
63
 
 
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)
 
69
                                return True
 
70
 
 
71
                        if the.verbose >= 2:
 
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
76
 
64
77
                        # if an entity has changed to/from a directory, we don't care about
65
78
                        # anything that directory does/did contain
66
79
                        return False
67
80
 
68
 
                # entity has been modified?
 
81
                # entity is a file that has been modified?
 
82
                if src.type == 'f':
 
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 )
 
87
                        else:
 
88
                                if the.verbose >= 2: print("  f=f " + rel_file)
 
89
                        return False
 
90
 
 
91
                # entity is a symlink that has been modified?
 
92
                elif dst.type == 'l':
 
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 )
 
97
                        else:
 
98
                                if the.verbose >= 2: print("  l=l " + rel_file)
 
99
                        return False
 
100
 
69
101
                # TODO: check directory permission changes
70
 
                if src_type == 'f':
71
 
                        if not filecmp.cmp( src_file, dst_file ):
72
 
                                self.modified.append( rel_file )
73
 
                elif dst_type == 'l':
74
 
                        if os.readlink( src_file ) != os.readlink( dst_file ):
75
 
                                self.modified.append( rel_file )
76
102
 
77
103
                # nothing to see here
 
104
                if the.verbose >= 2:
 
105
                        print("  %s=%s %s" % ( dst.type, src.type, rel_file ))
78
106
                return True