diff options
Diffstat (limited to 'patchtracker/SourceArchive.py')
-rwxr-xr-x | patchtracker/SourceArchive.py | 65 |
1 files changed, 41 insertions, 24 deletions
diff --git a/patchtracker/SourceArchive.py b/patchtracker/SourceArchive.py index 1f12001..a0aab1b 100755 --- a/patchtracker/SourceArchive.py +++ b/patchtracker/SourceArchive.py @@ -45,49 +45,66 @@ class Archive: def __str__(self): return "Archive rooted at "+self.root -class SourcePackage: - name = None - format = None - diffgz = None - loc = None - type = "Native" - version = None - # todo - vcs = {} +# XXX maybe there's a better place/way for this +def getidx(letter): + name = str(letter) + if len(name) < 4 or name[0:3] != "lib": + return name[0] + else: + return name[0:4] +class SourcePackage: def __init__(self, info): + self.diffgz_name = None + self.diffgz_size = None + self.diffgz_md5sum = None + self.diffgz = None + self.type = "Native" self.name = info['Package'] self.format = info['Format'] self.loc = info['Directory'] self.version = info['Version'] + self.idx = getidx(self) for f in info['Files']: if fnmatch(f['name'], '*.diff.gz'): - self.diffgz=f + self.diffgz_name=f['name'] + self.diffgz_size=f['size'] + self.diffgz_md5sum=f['md5sum'] self.type = "Debian-diff" - def idx(self): - name = str(self) - if len(name) < 4 or name[0:3] != "lib": - return name[0] - else: - return name[0:4] - def __str__(self): return self.name +class MasterIndex: + def __init__(self): + self.pkgcounts = {} + + def add(self, name): + idx = getidx(name) + if not self.pkgcounts.has_key(idx): + self.pkgcounts[idx] = 1 + else: + self.pkgcounts[idx] += 1 + + def indices(self): + for k,v in sorted(self.pkgcounts.iteritems()): + yield (k,v) + class SourcePackageIndex: def __init__(self): self.pkgs = {} def ins(self, srcpkg, rel): - idx = srcpkg.idx() - if not self.pkgs.has_key(idx): - self.pkgs[idx] = {} - if not self.pkgs[idx].has_key(srcpkg.name): - self.pkgs[idx][srcpkg.name] = {} - if not self.pkgs[idx][srcpkg.name].has_key(rel): - self.pkgs[idx][srcpkg.name][rel] = srcpkg + if not self.pkgs.has_key(srcpkg.idx): + self.pkgs[srcpkg.idx] = {} + if not self.pkgs[srcpkg.idx].has_key(srcpkg.name): + self.pkgs[srcpkg.idx][srcpkg.name] = {} + if not self.pkgs[srcpkg.idx][srcpkg.name].has_key(rel): + self.pkgs[srcpkg.idx][srcpkg.name][rel] = srcpkg + + def getletter(self, letter): + return self.pkgs[getidx(letter)] def indices(self): for k,v in sorted(self.pkgs.iteritems()): |