def check_backup(store, usermap):
    _, comments = bitbucket.stores(store)
    _, comments_backup = bitbucket.stores(store, backup=True)
    comments = dict(comments)
    comments_backup = dict(comments_backup)
    for d in comments, comments_backup:
        for k, v in list(d.items()):
            items = [bitbucket.simplify_comment(i, usermap) for i in (v or [])]
            items = [c for c in items if TRANSFER_COMMENT not in c['body']]
            if items:
                d[k] = items
                for item in items:
                    item.pop('body', None)
            else:
                d.pop(k, None)
    all_keys = {*comments, *comments_backup}
    print(sorted(map(int, all_keys)))
    print(len(all_keys))
    differences = {}
    for key in all_keys:
        old_len = len(comments_backup.get(key, ()))
        new_len = len(comments.get(key, ()))
        print(key, old_len, new_len)
        if old_len != new_len:
            differences[int(key)] = old_len, new_len

    import pprint
    pprint.pprint(differences)
    print('cul', sum(abs(a - b) for a, b in differences.values()))
def check_backup(store, usermap):
    _, comments = bitbucket.stores(store)
    _, comments_backup = bitbucket.stores(store, backup=True)
    comments = dict(comments)
    comments_backup = dict(comments_backup)
    for d in comments, comments_backup:
        for k, v in list(d.items()):
            items = [
                bitbucket.simplify_comment(i, usermap) for i in (v or [])
            ]
            items = [
                c for c in items
                if TRANSFER_COMMENT not in c['body']
            ]
            if items:
                d[k] = items
                for item in items:
                    item.pop('body', None)
            else:
                d.pop(k, None)
    all_keys = {*comments, *comments_backup}
    print(sorted(map(int, all_keys)))
    print(len(all_keys))
    differences = {}
    for key in all_keys:
        old_len = len(comments_backup.get(key, ()))
        new_len = len(comments.get(key, ()))
        print(key, old_len, new_len)
        if old_len != new_len:
            differences[int(key)] = old_len, new_len

    import pprint
    pprint.pprint(differences)
    print('cul', sum(abs(a-b) for a, b in differences.values()))
def fetch(store):
    issues, comments = bitbucket.stores(store)
    get = bitbucket.get_getter(store)
    current_issues = bitbucket.iter_issues(get)
    for elem in utils.gprocess(current_issues, label="Fetching Issues"):
        eid = elem['local_id']
        issues[eid] = elem
        existing = comments.get(eid)
        comments[eid] = bitbucket.get_comments(get, elem, existing)
def fetch(store):
    issues, comments = bitbucket.stores(store)
    get = bitbucket.get_getter(store)
    current_issues = bitbucket.iter_issues(get)
    for elem in utils.gprocess(current_issues, label="Fetching Issues"):
        eid = elem['local_id']
        issues[eid] = elem
        existing = comments.get(eid)
        comments[eid] = bitbucket.get_comments(get, elem, existing)
def convert(store, usermap=None):
    issues, comments = bitbucket.stores(store)

    simple_store = FileStore.ensure(store.path / 'github_uploads')

    repo = store['repos']['bitbucket']
    items = issues.items()
    usermap = usermap or store.get('users', {})
    for key, issue in gprocess(items, label='Preparing Import Requests'):
        issue['comments'] = comments[key]
        simplified = bitbucket.simplify_issue(bb_issue=issue,
                                              repo=repo,
                                              usermap=usermap)
        simple_store[key] = simplified
def convert(store):
    issues, comments = bitbucket.stores(store)

    simple_store = FileStore.ensure(store.path / 'github_uploads')

    repo = store['repos']['bitbucket']
    items = issues.items()
    for key, issue in gprocess(items, label='Preparing Import Requests'):
        issue['comments'] = comments[key]
        simplified = bitbucket.simplify_issue(
                bb_issue=issue,
                repo=repo,
                usermap=store.get('users', {}))
        simple_store[key] = simplified
def extract_users(store, usermap=None):
    """extract username list from authormap"""

    issues, comments = bitbucket.stores(store)

    usermap = usermap or store.get('users', {})
    for item in gprocess(issues, label='Extracting usermap'):
        issue = issues[item]
        comment_list = comments[item] or []  # accounts for None

        authors = utils.contributors(issue, comment_list)

        for author in authors:
            if author not in usermap:
                usermap[author] = None
    store['users'] = usermap
def extract_users(store):
    """extract username list from authormap"""

    issues, comments = bitbucket.stores(store)

    usermap = store.get('users', {})
    for item in gprocess(issues,
                         label='Extracting usermap'):
        issue = issues[item]
        comment_list = comments[item] or []  # accounts for None

        authors = utils.contributors(issue, comment_list)

        for author in authors:
            if author not in usermap:
                usermap[author] = None
    store['users'] = usermap
def user_stats(store, usermap=None, only_unmapped=False):
    """extract username list from authormap"""

    issues, comments = bitbucket.stores(store)

    users = store.get('users', {})
    usermap = usermap or {}
    for item in gprocess(issues, label='Extracting usermap'):
        issue = issues[item]
        comment_list = comments[item] or []  # accounts for None

        authors = utils.contributors(issue, comment_list, include_date=True)

        for (author, last_updated) in authors:
            if only_unmapped and users.get(author) is not None:
                continue
            infos = usermap.setdefault(author, {})
            infos['count'] = infos.get('count', 0) + 1
            infos['last_updated'] = max(last_updated,
                                        infos.get('last_updated', ''))
            infos.setdefault('status', set()).add(issue['status'])
    max_author_len = max(len(x) for x in usermap)
    max_count_len = len("%d" % max(x['count'] for x in usermap.values()))
    usermap_items = list(dict(author=k, **v) for k, v in usermap.items())
    usermap_items = sorted(usermap_items,
                           key=operator.itemgetter('count', 'last_updated'))
    for info in usermap_items:
        print("{author:{max_author_len}} "
              "{count:>{max_count_len}}  "
              "{last_updated}  {status}".format(
                  author=info['author'],
                  count=info['count'],
                  last_updated=info['last_updated'],
                  status=info['status'],
                  max_author_len=max_author_len,
                  max_count_len=max_count_len))