]> git.pld-linux.org Git - packages/rpm-build-tools.git/blob - check-unused-files.py
use cargo-vendor-filterer if available
[packages/rpm-build-tools.git] / check-unused-files.py
1 #!/usr/bin/python
2
3 import subprocess
4 import sys
5 import os
6 import fnmatch
7
8 def filterout_warnings(err, separator="\n"):
9     def filter():
10         for line in err.split(separator):
11             if line.startswith("warning: "):
12                 continue
13             yield line
14
15     return separator.join(list(filter()))
16
17 def specdump(spec):
18     p = subprocess.Popen(['rpm-specdump', spec], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
19     (out, err) = p.communicate(None)
20     p.wait()
21
22     err = filterout_warnings(err)
23
24     return (out, err)
25
26 if len(sys.argv) == 2:
27     spec = sys.argv[1]
28 else:
29     # try autodetecting
30     spec = "%s.spec" % os.path.basename(os.getcwd())
31
32 if not os.path.isfile(spec):
33     print >> sys.stderr, "%s: %s doesn't exist!" % (sys.argv[0], spec)
34     sys.exit(1)
35
36 dir = os.path.dirname(spec)
37 if dir == '':
38     dir = '.'
39
40 (out, err) = specdump(spec)
41 if err:
42     print >> sys.stderr, "%s: %s" % (sys.argv[0], err)
43     sys.exit(1)
44
45 files = []
46
47 for l in out.split('\n'):
48     data = l.split()
49     if len(data) != 3 or data[0] != 's':
50         continue
51     file = os.path.basename(data[2])
52     files.append(file)
53
54 obsolete = []
55
56 # files to exclude
57 exclude = ['log.*', '.#*', '*~', '*.orig', '*.sw?', '.bigfiles', 'sources']
58
59 # read .gitignore, distfiles files are filled there
60 if os.path.isfile('%s/.gitignore' % dir):
61     f = open('%s/.gitignore' % dir , 'r')
62     for l in f.readlines():
63         exclude.append(l.rstrip())
64
65 def git_entries(file):
66     p = subprocess.Popen(['git', 'ls-files'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
67     (out, err) = p.communicate(None)
68     p.wait()
69     if err:
70         print >> sys.stderr, "%s: %s" % (sys.argv[0], err)
71         sys.exit(1)
72     return out.split('\n')
73 gitfiles = git_entries(dir)
74
75 def blacklisted(file):
76     if file == os.path.basename(spec):
77         return True
78
79     if file in [ '.', '..', '.git', 'CVS', 'TODO']:
80         return True
81
82     if os.path.isdir(file):
83         return True
84
85     for pat in exclude:
86         if fnmatch.fnmatch(file, pat):
87             return True
88
89     return False
90
91 for file in os.listdir(dir):
92     file = os.path.basename(file)
93     if blacklisted(file):
94         continue
95
96     if not file in gitfiles:
97         print "Not in repo: %s" % file
98         continue
99
100     if file not in files:
101         print "Obsolete file: %s" % file
102         obsolete.append(file)
103
104 if obsolete:
105     print
106     print "git rm %s" % " ".join(obsolete)
107     print "git commit -m '- drop obsolete files' %s" % " ".join(obsolete)
This page took 0.035553 seconds and 3 git commands to generate.