Update reproducible builds patches
[deb_dpdk.git] / debian / update-control.py
1 #! /usr/bin/env python
2 #
3 # based on https://anonscm.debian.org/viewvc/pkg-boost/boost/trunk/debian/update-control.py
4 #
5
6 import sys
7 reload(sys)
8 sys.setdefaultencoding('utf-8')
9
10 from deb822 import Deb822
11 import re
12
13 gOldVersion = None
14 gNewVersion = None
15
16 class DpdkVersion:
17     def __init__(self, version):
18         (self.Major,self.Minor) = version.split('.')
19         self.PackageVersion = self.Major + '.' + self.Minor
20
21 def replaceVersion(string, ver1, ver2):
22     '''Search 'string' for a DpdkVersion ver1.  If
23     SharedObjectVersion or PackageVersion of ver1 is found, replace by
24     corresponding ver2 version string.  Return the updated string.'''
25     string = re.sub(ver1.PackageVersion, ver2.PackageVersion, string)
26     return string
27
28 def updateVersionedValue(paragraph, key):
29     if not paragraph.has_key(key): return
30     oldValue = paragraph[key]
31     paragraph[key] = replaceVersion(paragraph[key], gOldVersion, gNewVersion)
32     return (oldValue, paragraph[key])
33
34 def conflictsWithPrevious(paragraph):
35     if not paragraph.has_key('Conflicts'): return False
36     nameRe = re.sub('\d', '\\d', paragraph['Package'])
37     return re.search(nameRe, paragraph['Conflicts']) is not None
38
39 def updateConflicts(paragraph, oldPkgName):
40     newPkgName = paragraph['Package']
41     needsConflict = (newPkgName.endswith("-dev") and not newPkgName.endswith("-all-dev")) or conflictsWithPrevious(paragraph)
42     if not needsConflict: return
43     if paragraph.has_key('Conflicts'):
44         if paragraph['Conflicts'].find(oldPkgName) == -1:
45             paragraph['Conflicts'] += ', ' + oldPkgName
46     else:
47         paragraph['Conflicts'] = oldPkgName
48
49 def processSourceParagraph(p):
50     updateVersionedValue(p, 'Source')
51
52 def processPackageParagraph(p):
53     (oldPkgName, newPkgName) = updateVersionedValue(p, 'Package')
54     updateVersionedValue(p, 'Depends')
55     updateVersionedValue(p, 'Recommends')
56     updateVersionedValue(p, 'Suggests')
57     updateConflicts(p, oldPkgName)
58
59 def printParagraph(p):
60     for key in p.keys():
61         print "%s: %s" % (key, p[key])
62
63 def processControl():
64     firstParagraph = True
65     for paragraph in Deb822.iter_paragraphs(open('control')):
66         if firstParagraph:
67             processSourceParagraph(paragraph)
68             printParagraph(paragraph)
69             firstParagraph = False
70         else:
71             processPackageParagraph(paragraph)
72             print
73             printParagraph(paragraph)
74
75 if len(sys.argv) < 3:
76     print "Usage: cd debian/; %s <old version> <new version> > control_new" % sys.argv[0]
77     exit(1)
78
79 gOldVersion = DpdkVersion(sys.argv[1])
80 gNewVersion = DpdkVersion(sys.argv[2])
81 processControl()
82 print