diff --git a/pypiserver/core.py b/pypiserver/core.py index bef2ab3..7d8dc64 100755 --- a/pypiserver/core.py +++ b/pypiserver/core.py @@ -222,7 +222,8 @@ The following additional options can be specified with -U: the directory which contains the latest version of the package to be updated. - + -u + allow updating to unstable version (alpha, beta, rc, dev versions) Visit http://pypi.python.org/pypi/pypiserver for more information. """ @@ -240,9 +241,10 @@ def main(argv=None): server = None update_dry_run = True update_directory = None + update_stable_only = True try: - opts, roots = getopt.getopt(argv[1:], "i:p:r:d:Uxh", ["interface=", "port=", "root=", "server=", "disable-fallback", "version", "help"]) + opts, roots = getopt.getopt(argv[1:], "i:p:r:d:Uuxh", ["interface=", "port=", "root=", "server=", "disable-fallback", "version", "help"]) except getopt.GetoptError, err: sys.exit("usage error: %s" % (err,)) @@ -266,6 +268,8 @@ def main(argv=None): command = "update" elif k == "-x": update_dry_run = False + elif k == "-u": + update_stable_only = False elif k == "-d": update_directory = v elif k in ("-h", "--help"): @@ -288,7 +292,7 @@ def main(argv=None): if command == "update": from pypiserver import manage - manage.update(packages, update_directory, update_dry_run) + manage.update(packages, update_directory, update_dry_run, stable_only=update_stable_only) return server = server or "auto" diff --git a/pypiserver/manage.py b/pypiserver/manage.py index 813744c..c8c37ef 100644 --- a/pypiserver/manage.py +++ b/pypiserver/manage.py @@ -10,7 +10,24 @@ class pkgfile(object): self.version_info = pkg_resources.parse_version(self.version) -def find_updates(pkgset): +def is_stable_version(pversion): + for x in pversion: + if x.startswith("*final"): + return True + if x.startswith("*"): + return False + return False + + +def filter_stable_releases(releases): + res = [] + for pversion, version in releases: + if is_stable_version(pversion): + res.append((pversion, version)) + return res + + +def find_updates(pkgset, stable_only=True): no_releases = set() def write(s): @@ -38,6 +55,9 @@ def find_updates(pkgset): releases = pypi.package_releases(pkgname) releases = [(pkg_resources.parse_version(x), x) for x in releases] + if stable_only: + releases = filter_stable_releases(releases) + status = "." if releases: m = max(releases) @@ -61,8 +81,8 @@ def find_updates(pkgset): return need_update -def update(pkgset, destdir=None, dry_run=False): - need_update = find_updates(pkgset) +def update(pkgset, destdir=None, dry_run=False, stable_only=True): + need_update = find_updates(pkgset, stable_only=stable_only) for x in need_update: print "# update", x.pkgname, "from", x.version, "to", x.latest_version