diff options
Diffstat (limited to 'src/dh_xul-ext')
-rwxr-xr-x | src/dh_xul-ext | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/src/dh_xul-ext b/src/dh_xul-ext index 8413b3f..df9cb2b 100755 --- a/src/dh_xul-ext +++ b/src/dh_xul-ext @@ -15,8 +15,10 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import csv +import glob import optparse import os +import subprocess import sys from moz_version import compare_versions, convert_moz_to_debian_version @@ -59,6 +61,9 @@ class XulApp(object): versioned_package += " (>= " + deb_min_version + ")" return versioned_package + def is_same_package(self, xul_app): + return self.xul_id == xul_app.xul_id and self.package == xul_app.package + def set_max_version(self, max_version): if compare_versions(self.eol, max_version) > 0: self.max_version = max_version @@ -67,14 +72,44 @@ class XulApp(object): if compare_versions(self.sol, min_version) < 0: self.min_version = min_version + def update_version(self, sol, eol): + if compare_versions(self.sol, sol) > 0: + self.sol = sol + if compare_versions(self.eol, eol) < 0: + self.eol = eol + + +def _get_data_dir(): + """Get the data directory based on the module location.""" + if __file__.startswith("/usr/bin"): + data_dir = "/usr/share/mozilla-devscripts" + else: + data_dir = os.path.dirname(__file__) + return data_dir + +def get_xul_apps(all_distros): + data_dir = _get_data_dir() + if all_distros: + csv_filenames = glob.glob(os.path.join(data_dir, "xul-app-data.csv.*")) + else: + cmd = ["dpkg-vendor", "--query", "Vendor"] + process = subprocess.Popen(cmd, stdout=subprocess.PIPE) + vendor = process.communicate()[0].strip() + csv_filenames = [os.path.join(data_dir, "xul-app-data.csv." + vendor)] -def get_xul_apps(): - csvfile = open("/usr/share/mozilla-devscripts/xul-app-data.csv") - csv_reader = csv.DictReader(csvfile) xul_apps = [] - for row in csv_reader: - xul_app = XulApp(row["id"], row["package"], row["sol"], row["eol"]) - xul_apps.append(xul_app) + for csv_filename in csv_filenames: + csvfile = open(csv_filename) + csv_reader = csv.DictReader(csvfile) + for row in csv_reader: + xul_app = XulApp(row["id"], row["package"], row["sol"], row["eol"]) + existing = [x for x in xul_apps if x.is_same_package(xul_app)] + if existing: + xul_app = existing[0] + xul_app.update_version(row["sol"], row["eol"]) + else: + xul_apps.append(xul_app) + return xul_apps def get_supported_apps(script_name, xul_apps, install_rdf, package, @@ -207,7 +242,9 @@ def find_install_rdfs(path): def generate_substvars(script_name, xul_apps, package, verbose=False): install_rdfs = find_install_rdfs("debian/" + package) if len(install_rdfs) == 0: - # this package does not contain a xul extension + if verbose: + print script_name + ": " + package + \ + " does not contain a XUL extension (no install.rdf found)." return elif len(install_rdfs) > 1: print >> sys.stderr, ("%s: %s contains multiple install.rdf files. " @@ -277,6 +314,9 @@ def main(): script_name = os.path.basename(sys.argv[0]) epilog = "See %s(1) for more info." % (script_name) parser = UnknownOptionIgnoringOptionParser(epilog=epilog) + parser.add_option("-a", "--all", action="store_true", dest="all", + help="expand substvars to all known XUL applications " + "(not only of your distribution)", default=False) parser.add_option("-p", "--package", dest="packages", metavar="PACKAGE", action="append", default=[], help="calculate substvars only for the specified PACKAGE") @@ -294,7 +334,7 @@ def main(): (script_name, unknown_option)) print script_name + ": packages:", ", ".join(options.packages) - xul_apps = get_xul_apps() + xul_apps = get_xul_apps(options.all) if options.verbose and len(xul_apps) > 0: print script_name + ": found %i Xul applications:" % (len(xul_apps)) for xul_app in xul_apps: |