version-control-internal-file.diff
[platform/upstream/rpmlint.git] / SourceCheck.py
1 # -*- coding: utf-8 -*-
2 #############################################################################
3 # File          : SourceCheck.py
4 # Package       : rpmlint
5 # Author        : Frederic Lepied
6 # Created on    : Wed Oct 27 21:17:03 1999
7 # Version       : $Id: SourceCheck.py 1754 2010-03-30 20:34:48Z scop $
8 # Purpose       : verify source package correctness.
9 #############################################################################
10
11 import re
12
13 from Filter import addDetails, printError, printWarning
14 import AbstractCheck
15 import Config
16
17
18 DEFAULT_VALID_SRC_PERMS = (0644, 0755)
19
20 source_regex = re.compile('\\.(tar|patch|tgz|diff)$')
21 compress_ext = Config.getOption("CompressExtension", "bz2")
22 valid_src_perms = Config.getOption("ValidSrcPerms", DEFAULT_VALID_SRC_PERMS)
23
24 class SourceCheck(AbstractCheck.AbstractCheck):
25
26
27     def __init__(self):
28         AbstractCheck.AbstractCheck.__init__(self, 'SourceCheck')
29
30     def check(self, pkg):
31         # Check only source package
32         if not pkg.isSource():
33             return
34
35         # process file list
36         spec_file = None
37         for fname, pkgfile in pkg.files().items():
38             if fname.endswith('.spec'):
39                 if spec_file:
40                     printError(pkg, 'multiple-specfiles', spec_file, fname)
41                 else:
42                     spec_file = fname
43             elif source_regex.search(fname) and compress_ext and \
44                     not fname.endswith(compress_ext):
45                 printWarning(pkg, 'source-or-patch-not-compressed',
46                              compress_ext, fname)
47             perm = pkgfile.mode & 07777
48             if perm not in valid_src_perms:
49                 printWarning(pkg, 'strange-permission', fname, oct(perm))
50
51 check = SourceCheck()
52
53 addDetails(
54 'multiple-specfiles',
55 '''Your package contains multiple spec files. To build a
56 correct package, you need to have only one spec file containing
57 all your RPM information.''',
58
59 'source-or-patch-not-compressed',
60 '''A source archive or file in your package is not compressed using the %s
61 compression method (doesn't have the %s extension).''' %
62 (compress_ext, compress_ext),
63
64 'strange-permission',
65 '''A file that you listed to include in your package has strange
66 permissions. Usually, a file should have 0644 permissions.''',
67
68 )
69
70 # SourceCheck.py ends here
71
72 # Local variables:
73 # indent-tabs-mode: nil
74 # py-indent-offset: 4
75 # End:
76 # ex: ts=4 sw=4 et