/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-07-05 19:14:32 UTC
  • Revision ID: tim@ed.am-20210705191432-243ayb7s2nmussvi
python3ification

Show diffs side-by-side

added added

removed removed

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
 
49
49
 
50
50
                # entity is missing in home dir?
51
51
                if dst.type == '_':
52
 
                        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
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
58
60
 
59
61
                # entity has changed type?
60
62
                elif dst.get_type_name() != src.get_type_name():
61
 
                        self.changed.append( "%s (%s => %s)" % (
62
 
                                rel_file, src.get_type_name(), dst.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?
69
 
                # TODO: check directory permission changes
 
81
                # entity is a file that has been modified?
70
82
                if src.type == 'f':
71
83
                        if not filecmp.cmp( src.file, dst.file ):
72
 
                                self.modified.append( rel_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?
73
92
                elif dst.type == 'l':
74
93
                        if os.readlink( src.file ) != os.readlink( dst.file ):
75
 
                                self.modified.append( rel_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
 
 
101
                # TODO: check directory permission changes
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