diff --git a/project.py b/project.py old mode 100644 new mode 100755 index e4682e6a..5297a5cb --- a/project.py +++ b/project.py @@ -2270,6 +2270,16 @@ class Project(object): if self._allrefs: raise GitError('%s cherry-pick %s ' % (self.name, rev)) + def _LsRemote(self): + cmd = ['ls-remote'] + p = GitCommand(self, cmd, capture_stdout=True) + if p.Wait() == 0: + if hasattr(p.stdout, 'decode'): + return p.stdout.decode('utf-8') + else: + return p.stdout + return None + def _Revert(self, rev): cmd = ['revert'] cmd.append('--no-edit') diff --git a/subcmds/download.py b/subcmds/download.py old mode 100644 new mode 100755 index e1010aa2..384af781 --- a/subcmds/download.py +++ b/subcmds/download.py @@ -62,6 +62,14 @@ If no project is specified try to use current directory as a project. ps_id = int(m.group(2)) else: ps_id = 1 + regex = r'refs/changes/%2.2d/%d/(\d+)' % (chg_id % 100, chg_id) + output = project._LsRemote() + if output: + rcomp = re.compile(regex, re.I) + for line in output.splitlines(): + match = rcomp.search(line) + if match: + ps_id = max(int(match.group(1)), ps_id) to_get.append((project, chg_id, ps_id)) else: project = self.GetProjects([a])[0]