diff options
Diffstat (limited to 'project.py')
-rw-r--r-- | project.py | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -45,6 +45,31 @@ def _info(fmt, *args): | |||
45 | def not_rev(r): | 45 | def not_rev(r): |
46 | return '^' + r | 46 | return '^' + r |
47 | 47 | ||
48 | class DownloadedChange(object): | ||
49 | _commit_cache = None | ||
50 | |||
51 | def __init__(self, project, base, change_id, ps_id, commit): | ||
52 | self.project = project | ||
53 | self.base = base | ||
54 | self.change_id = change_id | ||
55 | self.ps_id = ps_id | ||
56 | self.commit = commit | ||
57 | |||
58 | @property | ||
59 | def commits(self): | ||
60 | if self._commit_cache is None: | ||
61 | self._commit_cache = self.project.bare_git.rev_list( | ||
62 | '--abbrev=8', | ||
63 | '--abbrev-commit', | ||
64 | '--pretty=oneline', | ||
65 | '--reverse', | ||
66 | '--date-order', | ||
67 | not_rev(self.base), | ||
68 | self.commit, | ||
69 | '--') | ||
70 | return self._commit_cache | ||
71 | |||
72 | |||
48 | class ReviewableBranch(object): | 73 | class ReviewableBranch(object): |
49 | _commit_cache = None | 74 | _commit_cache = None |
50 | 75 | ||
@@ -612,6 +637,23 @@ class Project(object): | |||
612 | src = os.path.join(self.worktree, src) | 637 | src = os.path.join(self.worktree, src) |
613 | self.copyfiles.append(_CopyFile(src, dest)) | 638 | self.copyfiles.append(_CopyFile(src, dest)) |
614 | 639 | ||
640 | def DownloadPatchSet(self, change_id, patch_id): | ||
641 | """Download a single patch set of a single change to FETCH_HEAD. | ||
642 | """ | ||
643 | remote = self.GetRemote(self.remote.name) | ||
644 | |||
645 | cmd = ['fetch', remote.name] | ||
646 | cmd.append('refs/changes/%2.2d/%d/%d' \ | ||
647 | % (change_id % 100, change_id, patch_id)) | ||
648 | cmd.extend(map(lambda x: str(x), remote.fetch)) | ||
649 | if GitCommand(self, cmd, bare=True).Wait() != 0: | ||
650 | return None | ||
651 | return DownloadedChange(self, | ||
652 | remote.ToLocal(self.revision), | ||
653 | change_id, | ||
654 | patch_id, | ||
655 | self.bare_git.rev_parse('FETCH_HEAD')) | ||
656 | |||
615 | 657 | ||
616 | ## Branch Management ## | 658 | ## Branch Management ## |
617 | 659 | ||