summaryrefslogtreecommitdiff
path: root/moz-version
diff options
context:
space:
mode:
Diffstat (limited to 'moz-version')
-rwxr-xr-xmoz-version154
1 files changed, 154 insertions, 0 deletions
diff --git a/moz-version b/moz-version
new file mode 100755
index 0000000..6362b31
--- /dev/null
+++ b/moz-version
@@ -0,0 +1,154 @@
+#!/usr/bin/python
+
+# Copyright (c) 2009-2011, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import getopt
+import os
+import sys
+
+from moz_version import (compare_versions, convert_debian_to_moz_version,
+ convert_moz_to_debian_version)
+
+# error codes
+COMMAND_LINE_SYNTAX_ERROR = 2
+INVALID_COMPARATOR = 3
+EMPTY_VERSION_STRING = 4
+
+COMPARATORS = ("lt", "le", "eq", "ne", "ge", "gt")
+
+def moz_version_compare(version1, comparator, version2, silent=False,
+ verbose=False):
+ """Return true if the expression version1 comparator version2 is valid,
+ otherwise false"""
+ if comparator not in COMPARATORS:
+ if not silent:
+ print >> sys.stderr, "E: The comparator " + comparator + \
+ " is not valid. It should one of " + \
+ ", ".join(COMPARATORS) + "."
+ sys.exit(INVALID_COMPARATOR)
+
+ if version1.strip() == "" or version2.strip() == "":
+ if not silent:
+ print >> sys.stderr, "E: At least one version string is empty."
+ sys.exit(EMPTY_VERSION_STRING)
+
+ if verbose:
+ symbol = {"lt": "<", "le": "<=", "eq": "=", "ne": "!=",
+ "ge": ">=", "gt": ">"}
+ print "I: Comparing %s %s %s." % \
+ (version1, symbol[comparator], version2)
+
+ if comparator == "lt":
+ return compare_versions(version1, version2, verbose) < 0
+ elif comparator == "le":
+ return compare_versions(version1, version2, verbose) <= 0
+ elif comparator == "eq":
+ return compare_versions(version1, version2, verbose) == 0
+ elif comparator == "ne":
+ return compare_versions(version1, version2, verbose) != 0
+ elif comparator == "ge":
+ return compare_versions(version1, version2, verbose) >= 0
+ elif comparator == "gt":
+ return compare_versions(version1, version2, verbose) > 0
+
+
+def usage(output):
+ name = os.path.basename(sys.argv[0])
+ print >> output, """Usage: %s [options] action
+
+Actions:
+ -c, --compare version1 comparator version2
+ compare both Mozilla version numbers
+ comparator must be one of %s
+ -d, --to-deb version converts Mozilla into a Debian upstream version
+ -m, --to-moz version converts Debian into a Mozilla version
+
+Options:
+ -h, --help display this help and exit
+ -s, --silent do not print anything and die silent on errors
+ -v, --verbose print more information
+
+See %s(1) for more info.""" % (name, ", ".join(COMPARATORS), name)
+
+
+def main():
+ try:
+ long_opts = ["compare", "help", "silent", "to-deb", "to-moz", "verbose"]
+ opts, args = getopt.gnu_getopt(sys.argv[1:], "cdhmsv", long_opts)
+ except getopt.GetoptError, e:
+ # print help information and exit:
+ print >> sys.stderr, str(e)
+ usage(sys.stderr)
+ sys.exit(COMMAND_LINE_SYNTAX_ERROR)
+
+ actions = set()
+ silent = False
+ verbose = False
+
+ for o, _ in opts:
+ if o in ("-c", "--compare"):
+ actions.add("compare")
+ elif o in ("-d", "--to-deb"):
+ actions.add("to-deb")
+ elif o in ("-h", "--help"):
+ usage(sys.stdout)
+ sys.exit()
+ elif o in ("-m", "--to-moz"):
+ actions.add("to-moz")
+ elif o in ("-s", "--silent"):
+ silent = True
+ elif o in ("-v", "--verbose"):
+ verbose = True
+ else:
+ assert False, "unhandled option"
+
+ if len(actions) != 1:
+ if not silent:
+ print >> sys.stderr, "E: You must specify an action."
+ usage(sys.stderr)
+ sys.exit(COMMAND_LINE_SYNTAX_ERROR)
+
+ action = actions.pop()
+
+ if action == "compare":
+ if len(args) != 3:
+ if not silent:
+ usage(sys.stderr)
+ sys.exit(COMMAND_LINE_SYNTAX_ERROR)
+ if moz_version_compare(args[0], args[1], args[2], silent, verbose):
+ if verbose:
+ print "I: Compare expression true."
+ sys.exit(0)
+ else:
+ if verbose:
+ print "I: Compare expression false."
+ sys.exit(1)
+ elif action == "to-deb":
+ if len(args) != 1:
+ if not silent:
+ print >> sys.stderr, "E: The action --to-deb takes exactly " + \
+ "one argument."
+ sys.exit(COMMAND_LINE_SYNTAX_ERROR)
+ print convert_moz_to_debian_version(args[0], 0, verbose)
+ elif action == "to-moz":
+ if len(args) != 1:
+ if not silent:
+ print >> sys.stderr, "E: The action --to-moz takes exactly " + \
+ "one argument."
+ sys.exit(COMMAND_LINE_SYNTAX_ERROR)
+ print convert_debian_to_moz_version(args[0], verbose)
+
+if __name__ == "__main__":
+ main()