Exemple #1
0
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.')
Exemple #2
0
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()