From 7e606a28e4151550bd8c3be84cf099035d74ff19 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 21 Oct 2024 23:48:24 +0300 Subject: [PATCH 1/5] add --comments args --- main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 268dc1cf..b54e6d87 100644 --- a/main.py +++ b/main.py @@ -23,6 +23,7 @@ def parse_args(): parser.add_argument('-l', '--list', type=str, required=True, help='Path to the file containing the list of repositories. Repositories should be separated by a line break. Names should be in the format / ') parser.add_argument("--download_repos", type=str, help="path to downloaded repositories", default='./') parser.add_argument('-o', '--out', type=str, required=True, help='output filename') + parser.add_argument("-C", "--comments", help="log comments for PR", action="store_true") parser.add_argument('-s', '--start', type=str, required=False, help='start time', default='2000/01/01-00:00:00') parser.add_argument('-f', '--finish', type=str, required=False, help='finish time', default='2400/01/01-00:00:00') parser.add_argument('-b', '--branch', type=str, required=False, help='branch to select commits, by default use "default" repository branch, use "all" to get all commits from all branches', default=None) @@ -60,6 +61,7 @@ def main(): csv_name = args.out path_drepo = args.download_repos fork_flag = args.forks_include + log_comments = args.comments try: client = git_logger.login(token=token) @@ -74,7 +76,7 @@ def main(): if args.commits: commits_parser.log_commits(client, working_repos, csv_name, start, finish, args.branch, fork_flag) if args.pull_requests: - pull_requests_parser.log_pull_requests(client, working_repos, csv_name, token, start, finish, fork_flag) + pull_requests_parser.log_pull_requests(client, working_repos, csv_name, token, start, finish, fork_flag, log_comments) if args.issues: issues_parser.log_issues(client, working_repos, csv_name, token, start, finish, fork_flag) if args.invites: From f07125461bf5baf437d9ba1b0619a2ce63664a97 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 21 Oct 2024 23:49:38 +0300 Subject: [PATCH 2/5] log PR comments only if flag is set --- pull_requests_parser.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/pull_requests_parser.py b/pull_requests_parser.py index 5cb85bc2..979d3eb9 100644 --- a/pull_requests_parser.py +++ b/pull_requests_parser.py @@ -71,7 +71,7 @@ def get_related_issues(pull_request_number, repo_owner, repo_name, token): return ';'.join(list_issues_url) -def log_repositories_pr(repository: Repository, csv_name, token, start, finish): +def log_repositories_pr(repository: Repository, csv_name, token, start, finish, log_comments=False): for pull in repository.get_pulls(state='all'): if pull.created_at.astimezone(pytz.timezone(TIMEZONE)) < start or pull.created_at.astimezone( pytz.timezone(TIMEZONE)) > finish: @@ -106,23 +106,25 @@ def log_repositories_pr(repository: Repository, csv_name, token, start, finish): 'milestone': get_info(pull.milestone, 'title') } - if pull.get_comments().totalCount > 0: - for comment in pull.get_comments(): - info = info_tmp - info['comment body'] = comment.body - info['comment created at'] = comment.created_at - info['comment author name'] = comment.user.name - info['comment author login'] = comment.user.login - info['comment author email'] = nvl(comment.user.email) - log_pr_to_csv(info, csv_name) - log_pr_to_stdout(info) + if log_comments: + comments = pull.get_comments() + if comments.totalCount > 0: + for comment in comments: + info = info_tmp + info['comment body'] = comment.body + info['comment created at'] = comment.created_at + info['comment author name'] = comment.user.name + info['comment author login'] = comment.user.login + info['comment author email'] = nvl(comment.user.email) + log_pr_to_csv(info, csv_name) + log_pr_to_stdout(info) else: log_pr_to_csv(info_tmp, csv_name) log_pr_to_stdout(info_tmp) sleep(TIMEDELTA) -def log_pull_requests(client: Github, working_repos, csv_name, token, start, finish, fork_flag): +def log_pull_requests(client: Github, working_repos, csv_name, token, start, finish, fork_flag, log_comments=False): with open(csv_name, 'w', newline='') as file: writer = csv.writer(file) writer.writerow(FIELDNAMES) @@ -134,7 +136,7 @@ def log_pull_requests(client: Github, working_repos, csv_name, token, start, fin if fork_flag: for forked_repo in repo.get_forks(): print('=' * 20, "FORKED:", forked_repo.full_name, '=' * 20) - log_repositories_pr(forked_repo, csv_name, token, start, finish) + log_repositories_pr(forked_repo, csv_name, token, start, finish, log_comments) sleep(TIMEDELTA) sleep(TIMEDELTA) except Exception as e: From 6c2ea43dbe2121ef67c5e5a7c4d36586c2eb9244 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 9 Dec 2024 20:41:26 +0300 Subject: [PATCH 3/5] Update commits_parser.py (fix author.login error) --- commits_parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commits_parser.py b/commits_parser.py index 23f41fb5..fa476eeb 100644 --- a/commits_parser.py +++ b/commits_parser.py @@ -39,7 +39,7 @@ def log_repository_commits(repository: Repository, csv_name, start, finish, bran continue if commit.commit is not None: nvl = lambda val: val or EMPTY_FIELD - commit_data = [repository.full_name, commit.commit.author.name, nvl(commit.author.login), nvl(commit.commit.author.email), + commit_data = [repository.full_name, commit.commit.author.name, nvl(commit.author.login if commit.author else None), nvl(commit.commit.author.email), commit.commit.author.date, '; '.join([file.filename for file in commit.files]), commit.commit.sha, branch] info = dict(zip(FIELDNAMES, commit_data)) From c232b3b86d470617e6497dd85f05e83228a27ca4 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sun, 15 Dec 2024 21:57:16 +0300 Subject: [PATCH 4/5] update name of pr_comments flag & add info to readme --- README.md | 2 +- main.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 53fe1413..d2a9e468 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ python3 main.py [-i, --issues] [-t, --token] token (github токен вмест ``` 3. Логирование pull requests ```commandline -python3 main.py [-p, --pull_requests] [-t, --token] token (github токен вместо token) [-l, --list] list (list - строка пути к txt файлу со списком репозиториев) [-o, --out] out (out - название csv файла, в который будут помещены все логи) +python3 main.py [-p, --pull_requests] [-t, --token] token (github токен вместо token) [-l, --list] list (list - строка пути к txt файлу со списком репозиториев) [-o, --out] out (out - название csv файла, в который будут помещены все логи) [--pr_comments] (если установлен - также выгружаются комментарии к PR) ``` 4. Логирование непринятых приглашений в репо ```commandline diff --git a/main.py b/main.py index b54e6d87..0a8ec434 100644 --- a/main.py +++ b/main.py @@ -23,7 +23,7 @@ def parse_args(): parser.add_argument('-l', '--list', type=str, required=True, help='Path to the file containing the list of repositories. Repositories should be separated by a line break. Names should be in the format / ') parser.add_argument("--download_repos", type=str, help="path to downloaded repositories", default='./') parser.add_argument('-o', '--out', type=str, required=True, help='output filename') - parser.add_argument("-C", "--comments", help="log comments for PR", action="store_true") + parser.add_argument("--pr_comments", help="log comments for PR", action="store_true") parser.add_argument('-s', '--start', type=str, required=False, help='start time', default='2000/01/01-00:00:00') parser.add_argument('-f', '--finish', type=str, required=False, help='finish time', default='2400/01/01-00:00:00') parser.add_argument('-b', '--branch', type=str, required=False, help='branch to select commits, by default use "default" repository branch, use "all" to get all commits from all branches', default=None) @@ -61,8 +61,7 @@ def main(): csv_name = args.out path_drepo = args.download_repos fork_flag = args.forks_include - log_comments = args.comments - + log_pr_comments = args.pr_comments try: client = git_logger.login(token=token) except Exception as e: @@ -76,7 +75,7 @@ def main(): if args.commits: commits_parser.log_commits(client, working_repos, csv_name, start, finish, args.branch, fork_flag) if args.pull_requests: - pull_requests_parser.log_pull_requests(client, working_repos, csv_name, token, start, finish, fork_flag, log_comments) + pull_requests_parser.log_pull_requests(client, working_repos, csv_name, token, start, finish, fork_flag, log_pr_comments) if args.issues: issues_parser.log_issues(client, working_repos, csv_name, token, start, finish, fork_flag) if args.invites: From ee73148c93b05f115abca7aee09a91b62634032b Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sun, 15 Dec 2024 21:58:05 +0300 Subject: [PATCH 5/5] fix "Possibly using variable 'start' / 'finish' before assignment" --- main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 0a8ec434..3626774f 100644 --- a/main.py +++ b/main.py @@ -61,7 +61,9 @@ def main(): csv_name = args.out path_drepo = args.download_repos fork_flag = args.forks_include - log_pr_comments = args.pr_comments + log_pr_comments = args.pr_comments + start, finish = None, None + try: client = git_logger.login(token=token) except Exception as e: