def _get_state(self, h, rev_in): assert isinstance(rev_in, (str, unicode, int, long)) try: rev = int(rev_in) except ValueError: # we have a "date string" from parse_dt import parse rev = parse(rev_in) if rev is None: raise EnpkgError("Error: could not parse: %r" % rev_in) try: return h.get_state(rev) except IndexError: raise EnpkgError("Error: no such revision: %r" % rev)
def revert(enst, rev_in, quiet=False): history = History(enst.prefixes[0]) try: rev = int(rev_in) except ValueError: # we have a "date string" from parse_dt import parse rev = parse(rev_in) if rev is None: sys.exit("Error: could not parse: %r" % rev_in) print "reverting to: %r" % rev try: state = history.get_state(rev) except IndexError: sys.exit("Error: no such revision: %r" % rev) curr = set(egginst.get_installed()) if state == curr: print "Nothing to revert" return # remove packages for fn in curr - state: enst.remove_egg(fn) # install packages (fetch from server if necessary) to_install = [] need_fetch = [] for fn in state - curr: to_install.append(fn) if not isfile(join(enst.egg_dir, fn)): need_fetch.append(fn) if need_fetch: for fn in need_fetch: dist = enst.chain.get_dist(filename_as_req(fn)) if dist: enst.chain.fetch_dist(dist, enst.egg_dir, dry_run=enst.dry_run) for fn in to_install: egg_path = join(enst.egg_dir, fn) if isfile(egg_path): ei = egginst.EggInst(egg_path) ei.install() history.update()