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