def update_pulls(self, base_commit): pulls = [p for p in Git.pulls().values() if self.accept(p)] pull_dict = dict((p.number, p.commit_id) for p in pulls) pull_dict['base_commit'] = base_commit if self.pull_dict != pull_dict: self.pull_dict = pull_dict _release(pulls, self.branch('working'), self.branch('next'), self.name) return True
def get_format_string(name, user, context): def get_url(): full_path = os.getcwd() if name: path, f = os.path.split(name) full_path = os.path.join(full_path, path) if not os.path.exists(full_path): raise ValueError("Path %s doesn't exist." % full_path) if f: for p in os.listdir(full_path): if startswith(p, f): full_path = os.path.join(full_path, p) break else: raise ValueError("Can't find file matching " + name) context['path'] = os.path.relpath(full_path, GitRoot.ROOT) return _URL if not name: return get_url() if name.isdigit(): context['number'] = int(name) return PULL if 'commits'.startswith(name): return _COMMIT if 'diffs'.startswith(name): return _DIFF if 'pull'.startswith(name): return _PULL if 'pending'.startswith(name): if user == Settings.PROJECT_USER: return Pulls.pull_urls()[0] if user == Settings.USER: branch_name = '%s:%s' % (user, Git.branch()) for number, pull in Git.pulls().items(): if pull.branch == branch_name: context['number'] = number return PULL else: return _NEW_PULL raise ValueError("Can't pull for user %s." % user) if 'root'.startswith(name): name = GitRoot.root() return get_url()
def parse_branch(branch): try: pull_number = int(branch) except: pass else: pulls = Git.pulls() if pull_number not in pulls: raise ValueError(_ERROR % (pull, ' '.join(sorted(pulls)))) pull = pulls[pull_number] branch = pull.branch if ':' in branch: return branch.split(':', 1) else: return Settings.USER, branch
def pulls(): for number, p in reversed(sorted(Git.pulls().items())): print(_to_string(number, p.branch, p.title))