Package daklib :: Module regexes
[hide private]
[frames] | no frames]

Source Code for Module daklib.regexes

  1  # vim:set et sw=4: 
  2   
  3  """ 
  4  Central repository of regexes for dak 
  5   
  6  @contact: Debian FTP Master <ftpmaster@debian.org> 
  7  @copyright: 2001, 2002, 2003, 2004, 2005, 2006  James Troup <james@nocrew.org> 
  8  @copyright: 2009  Mark Hymers <mhy@debian.org> 
  9  @copyright: 2009, 2010  Joerg Jaspert <joerg@debian.org> 
 10  @license: GNU General Public License version 2 or later 
 11  """ 
 12   
 13  # This program is free software; you can redistribute it and/or modify 
 14  # it under the terms of the GNU General Public License as published by 
 15  # the Free Software Foundation; either version 2 of the License, or 
 16  # (at your option) any later version. 
 17   
 18  # This program is distributed in the hope that it will be useful, 
 19  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 20  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 21  # GNU General Public License for more details. 
 22   
 23  # You should have received a copy of the GNU General Public License 
 24  # along with this program; if not, write to the Free Software 
 25  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 26   
 27  ############################################################################### 
 28   
 29  import re 
 30   
 31  #: Is it a number? 
 32  re_isanum = re.compile(r"^\d+$") 
 33   
 34  #: Looking for the default reply 
 35  re_default_answer = re.compile(r"\[(.*)\]") 
 36  #: Detect a binnmu 
 37  re_bin_only_nmu = re.compile(r"\+b\d+$") 
 38   
 39  #: To sort out comment lines 
 40  re_comments = re.compile(r"\#.*") 
 41  #: To ignore comment and whitespace lines. 
 42  re_whitespace_comment = re.compile(r"^\s*(#|$)") 
 43  re_no_epoch = re.compile(r"^\d+\:") 
 44  re_extract_src_version = re.compile(r"(\S+)\s*\((.*)\)") 
 45  re_isadeb = re.compile(r"(.+?)_(.+?)_(.+)\.u?deb$") 
 46   
 47  orig_source_ext_re = r"orig(?:-[a-zA-Z0-9-]+)?\.tar\.(?:gz|bz2|xz)(?:\.asc)?" 
 48  file_source_ext_re = ( 
 49      "(" + orig_source_ext_re + r"|(?:debian\.)?tar\.(?:gz|bz2|xz)|diff\.gz)" 
 50  ) 
 51  re_source_ext = re.compile("(" + file_source_ext_re + r"|dsc)$") 
 52  re_issource = re.compile(r"(.+)_(.+?)\." + re_source_ext.pattern) 
 53   
 54  re_single_line_field = re.compile(r"^(\S*?)\s*:\s*(.*)") 
 55  re_multi_line_field = re.compile(r"^\s(.*)") 
 56  re_taint_free = re.compile(r"^[-+~/\.\w]+$") 
 57   
 58  re_parse_maintainer = re.compile(r"^\s*(\S.*\S)\s*\<([^\>]+)\>") 
 59   
 60  re_srchasver = re.compile(r"^(\S+)\s+\((\S+)\)$") 
 61  re_verwithext = re.compile(r"^(\d+)(?:\.(\d+))(?:\s+\((\S+)\))?$") 
 62   
 63  # From clean_proposed_updates.py 
 64  re_isdeb = re.compile(r"^(.+)_(.+?)_(.+?).u?deb$") 
 65   
 66  # From examine_package.py 
 67  re_package = re.compile(r"^(.+?)_.*") 
 68  re_doc_directory = re.compile(r".*/doc/([^/]*).*") 
 69   
 70  re_contrib = re.compile("^contrib/") 
 71  re_nonfree = re.compile("^(?:non-free-firmware|non-free)/") 
 72   
 73  re_localhost = re.compile(r"localhost\.localdomain") 
 74  re_version = re.compile(r"^(.*)\((.*)\)") 
 75   
 76  re_newlinespace = re.compile("\n") 
 77  re_spacestrip = re.compile(r"(\s)") 
 78   
 79  # From new_security_install.py 
 80  re_taint_free = re.compile(r"^['/;\-\+\.~\s\w]+$") 
 81   
 82  # From process_unchecked.py 
 83  re_changelog_versions = re.compile(r"^\w[-+0-9a-z.]+ \([^\(\) \t]+\)") 
 84   
 85  # From dak/rm.py 
 86  re_strip_source_version = re.compile(r"\s+.*$") 
 87  re_build_dep_arch = re.compile(r"\[[^]]+\]") 
 88   
 89  # From dak/transitions.py 
 90  re_broken_package = re.compile(r"[a-zA-Z]\w+\s+\-.*") 
 91   
 92  # From dak/add_user.py 
 93  re_gpg_fingerprint_colon = re.compile(r"^fpr:+(.*):$", re.MULTILINE) 
 94  # The next one is dirty 
 95  re_user_address = re.compile(r"^pub:.*<(.*)@.*>.*$", re.MULTILINE) 
 96  re_user_mails = re.compile(r"^(pub|uid):[^rdin].*<(.*@.*)>.*$", re.MULTILINE) 
 97  re_user_name = re.compile(r"^pub:.*:(.*)<.*$", re.MULTILINE) 
 98  re_re_mark = re.compile(r"^RE:") 
 99   
100  re_parse_lintian = re.compile( 
101      r"^(?P<level>W|E|O): (?P<package>.*?): (?P<tag>[^ ]*) ?(?P<description>.*)$" 
102  ) 
103   
104  # in generate-releases 
105  re_gensubrelease = re.compile(r".*/(binary-[0-9a-z-]+|source)$") 
106  re_includeinrelease_byhash = re.compile( 
107      r"(Translation-[a-zA-Z_]+\.(?:bz2|xz|zst)|Contents-[0-9a-z-]+.gz|Index|Packages(.gz|.bz2|.xz|.zst)?|Sources(.gz|.bz2|.xz|.zst)?|Components-[0-9a-z-]+.yml(.gz|.xz)|icons-[0-9x-]+.tar(.gz|.xz)|Release)$" 
108  ) 
109  re_includeinrelease_plain = re.compile(r"(MD5SUMS|SHA256SUMS)$") 
110   
111  # in generate_index_diffs 
112  re_includeinpdiff = re.compile(r"(Translation-[a-zA-Z_]+\.(?:bz2|xz|zst))") 
113   
114   
115  ###################################################################### 
116  # Patterns matching filenames                                        # 
117  ###################################################################### 
118   
119  # Match safe filenames 
120  re_file_safe = re.compile(r"^[a-zA-Z0-9][a-zA-Z0-9_.~+-]*$") 
121   
122  # Match safe filenames, including slashes 
123  re_file_safe_slash = re.compile(r"^[a-zA-Z0-9][/a-zA-Z0-9_.~+-]*$") 
124   
125  # Prefix of binary and source filenames 
126  _re_file_prefix = r"^(?P<package>[a-z0-9][a-z0-9.+-]+)_(?P<version>[A-Za-z0-9.~+-]+?)" 
127   
128  # Match binary packages 
129  # Groups: package, version, architecture, type 
130  re_file_binary = re.compile( 
131      _re_file_prefix + r"_(?P<architecture>[a-z0-9-]+)\.(?P<type>u?deb)$" 
132  ) 
133   
134  # Match changes files 
135  # Groups: package, version, suffix 
136  re_file_changes = re.compile(_re_file_prefix + r"_(?P<suffix>[a-zA-Z0-9+-]+)\.changes$") 
137   
138  # Match dsc files 
139  # Groups: package, version 
140  re_file_dsc = re.compile(_re_file_prefix + r"\.dsc$") 
141   
142  # Match other source files 
143  # Groups: package, version 
144  re_file_source = re.compile(_re_file_prefix + r"\." + file_source_ext_re) 
145   
146  # Match upstream tarball 
147  # Groups: package, version 
148  re_file_orig = re.compile(_re_file_prefix + r"\." + orig_source_ext_re) 
149   
150  # Match buildinfo file 
151  # Groups: package, version, suffix 
152  re_file_buildinfo = re.compile( 
153      _re_file_prefix + r"_(?P<suffix>[a-zA-Z0-9+-]+)\.buildinfo$" 
154  ) 
155   
156  ###################################################################### 
157  # Patterns matching fields                                           # 
158  ###################################################################### 
159   
160  # Match package name 
161  re_field_package = re.compile(r"^[a-z0-9][a-z0-9.+-]+$") 
162   
163  # Match version 
164  # Groups: without-epoch 
165  re_field_version = re.compile(r"^(?:[0-9]+:)?(?P<without_epoch>[A-Za-z0-9.:~+-]+)$") 
166   
167  # Extract upstream version 
168  # Groups: upstream 
169  re_field_version_upstream = re.compile(r"^(?:[0-9]+:)?(?P<upstream>.*)-[^-]*$") 
170   
171  # Match source field 
172  # Groups: package, version 
173  re_field_source = re.compile( 
174      r"^(?P<package>[a-z0-9][a-z0-9.+-]+)(?:\s*\((?P<version>[A-Za-z0-9.:~+-]+)\))?$" 
175  ) 
176