def _release(pulls, working_branch, next_branch, selector_name): Git.complete_reset() Delete.do_delete([working_branch], print=None) Git.copy_from_remote(base_branch(), working_branch, push=False) pulls.sort(key=operator.attrgetter('number')) if pulls: print('%s: Building release branch for %s:' % ( String.timestamp(), selector_name)) print(' ' + '\n '.join(str(p) for p in pulls)) print() success = [] failure = [] exceptions = [] for pull in pulls: try: print(pull.number, '...', sep='', end='') _pull_request(pull, working_branch) except VcxprojException: failure.append(pull.number) print('VCXPROJ...', end='') except Exception as e: failure.append(pull.number) print('ERROR...', end='') else: success.append(pull.number) if pulls: print() print() Version.version_commit( version_number=None, success=success, failure=failure) commit_id = Git.commit_id() Git.force_checkout(next_branch) Git.git('reset', '--hard', commit_id) Git.git('push', '-f') commits = Open.get_commits() plural = '' if len(commits) == 1 else 's' _print_pulls('Proposed new develop branch %s for pull%s' % (commits, plural), success) _print_pulls('FAILED:', failure) if success or failure: print('---------------------------------------------') print() else: print(String.timestamp(), ': no pulls ready.')
def slack(days=2): days = int(days) inverse = Remote.inverse() slack_names = Project.settings('slack') def slack(user): return '@' + slack_names[user] label_names = dict((v, k) for (k, v) in Project.settings('labels').items()) def labels_to_names(labels): return ' '.join( slack(label_names[i]) for i in labels if i in label_names) previous = get_previous_business_day(days) def match(issue): if issue['updated_at'] >= previous: # print('too new:', issue['number'], issue['updated_at'], previous) return False for label in issue['labels']: if label['name'] in ('Passed', 'Hold'): # print('passed:', issue['number']) return False # print('slack:', issue['number']) return True if False: import json json.dump(Git.issues(), open('/tmp/git-issues.json', 'w'), sort_keys=True, indent=4, separators=(',', ': ')) slackers = [i for i in Git.issues() if match(i)] if not slackers: return; print('\nPull requests that are over %d business day%s stale:' % ( days, '' if days == 1 else 's')) labels = Git.labels() for issue in sorted(slackers, key=operator.itemgetter('updated_at')): try: user = slack(inverse[issue['user']['login']]) + ':' update = issue['updated_at'][:10] url = Open.get_url(str(issue['number'])) lab = labels_to_names(labels[issue['number']]) print(' %s (%s): %s (%s)' % (url, update, user, lab)) except Exception as e: print('ERROR:', e) raise print()