* Add lots of comments to user.Issues() * Answered some questions from comments * fix typo in comment * Refac user.Issues(): add func repoIDs * Refac user.Issues(): add func userRepoIDs * Refac user.Issues(): add func issueIDsFromSearch * Refac user.Issues(): improve error handling * Refac user.Issues(): add inline documentation and move variable declarations closer to their usages * Refac user.Issues(): add func repoIDMap * Refac user.Issues(): cleanup * Refac: Separate Issues from Pulls during routing * fix typo in comment * Adapt Unittests to Refactoring * Issue13171: Issue and PR Overviews now ignore archived Repositories * changed some verbatim SQL conditions to builder.Eq * models/issue.go: use OptionalBool properly Co-authored-by: 6543 <6543@obermui.de> * Use IsArchived rather than ExcludeArchivedRepos * fixed broken test after merge * added nil check * Added Unit Test securing Issue 13171 fix * Improved IsArchived filtering in issue.GetUserIssueStats * Removed unused func * Added grouping to avoid returning duplicate repo IDs Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Gitea <gitea@fake.local> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
		
			
				
	
	
		
			737 lines
		
	
	
		
			No EOL
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			737 lines
		
	
	
		
			No EOL
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| -
 | |
|   id: 1
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: repo1
 | |
|   name: repo1
 | |
|   is_archived: false
 | |
|   is_empty: false
 | |
|   is_private: false
 | |
|   num_issues: 2
 | |
|   num_closed_issues: 1
 | |
|   num_pulls: 3
 | |
|   num_closed_pulls: 0
 | |
|   num_milestones: 3
 | |
|   num_closed_milestones: 1
 | |
|   num_watches: 4
 | |
|   num_projects: 1
 | |
|   num_closed_projects: 0
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 2
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: repo2
 | |
|   name: repo2
 | |
|   is_archived: false
 | |
|   is_private: true
 | |
|   num_issues: 2
 | |
|   num_closed_issues: 1
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_stars: 1
 | |
|   close_issues_via_commit_in_any_branch: true
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 3
 | |
|   owner_id: 3
 | |
|   owner_name: user3
 | |
|   lower_name: repo3
 | |
|   name: repo3
 | |
|   is_private: true
 | |
|   num_issues: 1
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 1
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   num_projects: 1
 | |
|   num_closed_projects: 0
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 4
 | |
|   owner_id: 5
 | |
|   owner_name: user5
 | |
|   lower_name: repo4
 | |
|   name: repo4
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_stars: 1
 | |
|   num_projects: 0
 | |
|   num_closed_projects: 1
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 5
 | |
|   owner_id: 3
 | |
|   owner_name: user3
 | |
|   lower_name: repo5
 | |
|   name: repo5
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   is_mirror: true
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 6
 | |
|   owner_id: 10
 | |
|   owner_name: user10
 | |
|   lower_name: repo6
 | |
|   name: repo6
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 7
 | |
|   owner_id: 10
 | |
|   owner_name: user10
 | |
|   lower_name: repo7
 | |
|   name: repo7
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 8
 | |
|   owner_id: 10
 | |
|   owner_name: user10
 | |
|   lower_name: repo8
 | |
|   name: repo8
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 9
 | |
|   owner_id: 11
 | |
|   owner_name: user11
 | |
|   lower_name: repo9
 | |
|   name: repo9
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 10
 | |
|   owner_id: 12
 | |
|   owner_name: user12
 | |
|   lower_name: repo10
 | |
|   name: repo10
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 1
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   num_forks: 1
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 11
 | |
|   fork_id: 10
 | |
|   owner_id: 13
 | |
|   owner_name: user13
 | |
|   lower_name: repo11
 | |
|   name: repo11
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 12
 | |
|   owner_id: 14
 | |
|   owner_name: user14
 | |
|   lower_name: test_repo_12
 | |
|   name: test_repo_12
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 13
 | |
|   owner_id: 14
 | |
|   owner_name: user14
 | |
|   lower_name: test_repo_13
 | |
|   name: test_repo_13
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 14
 | |
|   owner_id: 14
 | |
|   owner_name: user14
 | |
|   lower_name: test_repo_14
 | |
|   name: test_repo_14
 | |
|   description: test_description_14
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 15
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: repo15
 | |
|   name: repo15
 | |
|   is_empty: true
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 16
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: repo16
 | |
|   name: repo16
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 17
 | |
|   owner_id: 15
 | |
|   owner_name: user15
 | |
|   lower_name: big_test_public_1
 | |
|   name: big_test_public_1
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 18
 | |
|   owner_id: 15
 | |
|   owner_name: user15
 | |
|   lower_name: big_test_public_2
 | |
|   name: big_test_public_2
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 19
 | |
|   owner_id: 15
 | |
|   owner_name: user15
 | |
|   lower_name: big_test_private_1
 | |
|   name: big_test_private_1
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 20
 | |
|   owner_id: 15
 | |
|   owner_name: user15
 | |
|   lower_name: big_test_private_2
 | |
|   name: big_test_private_2
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 21
 | |
|   owner_id: 16
 | |
|   owner_name: user16
 | |
|   lower_name: big_test_public_3
 | |
|   name: big_test_public_3
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 22
 | |
|   owner_id: 16
 | |
|   owner_name: user16
 | |
|   lower_name: big_test_private_3
 | |
|   name: big_test_private_3
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 23
 | |
|   owner_id: 17
 | |
|   owner_name: user17
 | |
|   lower_name: big_test_public_4
 | |
|   name: big_test_public_4
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 24
 | |
|   owner_id: 17
 | |
|   owner_name: user17
 | |
|   lower_name: big_test_private_4
 | |
|   name: big_test_private_4
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 25
 | |
|   owner_id: 20
 | |
|   owner_name: user20
 | |
|   lower_name: big_test_public_mirror_5
 | |
|   name: big_test_public_mirror_5
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   is_mirror: true
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 26
 | |
|   owner_id: 20
 | |
|   owner_name: user20
 | |
|   lower_name: big_test_private_mirror_5
 | |
|   name: big_test_private_mirror_5
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   is_mirror: true
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 27
 | |
|   owner_id: 19
 | |
|   owner_name: user19
 | |
|   lower_name: big_test_public_mirror_6
 | |
|   name: big_test_public_mirror_6
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   is_mirror: true
 | |
|   num_forks: 1
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 28
 | |
|   owner_id: 19
 | |
|   owner_name: user19
 | |
|   lower_name: big_test_private_mirror_6
 | |
|   name: big_test_private_mirror_6
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_watches: 0
 | |
|   is_mirror: true
 | |
|   num_forks: 1
 | |
|   is_fork: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 29
 | |
|   fork_id: 27
 | |
|   owner_id: 20
 | |
|   owner_name: user20
 | |
|   lower_name: big_test_public_fork_7
 | |
|   name: big_test_public_fork_7
 | |
|   is_private: false
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: true
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 30
 | |
|   fork_id: 28
 | |
|   owner_id: 20
 | |
|   owner_name: user20
 | |
|   lower_name: big_test_private_fork_7
 | |
|   name: big_test_private_fork_7
 | |
|   is_private: true
 | |
|   num_issues: 0
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   is_mirror: false
 | |
|   is_fork: true
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 31
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: repo20
 | |
|   name: repo20
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 32 # org public repo
 | |
|   owner_id: 3
 | |
|   owner_name: user3
 | |
|   lower_name: repo21
 | |
|   name: repo21
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 33
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: utf8
 | |
|   name: utf8
 | |
|   is_private: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 34
 | |
|   owner_id: 21
 | |
|   owner_name: user21
 | |
|   lower_name: golang
 | |
|   name: golang
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 35
 | |
|   owner_id: 21
 | |
|   owner_name: user21
 | |
|   lower_name: graphql
 | |
|   name: graphql
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 36
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: commits_search_test
 | |
|   name: commits_search_test
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 37
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: git_hooks_test
 | |
|   name: git_hooks_test
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 38
 | |
|   owner_id: 22
 | |
|   owner_name: limited_org
 | |
|   lower_name: public_repo_on_limited_org
 | |
|   name: public_repo_on_limited_org
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 39
 | |
|   owner_id: 22
 | |
|   owner_name: limited_org
 | |
|   lower_name: private_repo_on_limited_org
 | |
|   name: private_repo_on_limited_org
 | |
|   is_private: true
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 40
 | |
|   owner_id: 23
 | |
|   owner_name: limited_org
 | |
|   lower_name: public_repo_on_private_org
 | |
|   name: public_repo_on_private_org
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 41
 | |
|   owner_id: 23
 | |
|   owner_name: limited_org
 | |
|   lower_name: private_repo_on_private_org
 | |
|   name: private_repo_on_private_org
 | |
|   is_private: true
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
| 
 | |
| -
 | |
|   id: 42
 | |
|   owner_id: 2
 | |
|   owner_name: user2
 | |
|   lower_name: glob
 | |
|   name: glob
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 1
 | |
|   num_milestones: 1
 | |
|   is_mirror: false
 | |
| 
 | |
| -
 | |
|   id: 43
 | |
|   owner_id: 26
 | |
|   owner_name: org26
 | |
|   lower_name: repo26
 | |
|   name: repo26
 | |
|   is_private: true
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 44
 | |
|   owner_id: 27
 | |
|   owner_name: user27
 | |
|   lower_name: template1
 | |
|   name: template1
 | |
|   is_private: false
 | |
|   is_template: true
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 45
 | |
|   owner_id: 27
 | |
|   owner_name: user27
 | |
|   lower_name: template2
 | |
|   name: template2
 | |
|   is_private: false
 | |
|   is_template: true
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 46
 | |
|   owner_id: 26
 | |
|   owner_name: org26
 | |
|   lower_name: repo_external_tracker
 | |
|   name: repo_external_tracker
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 47
 | |
|   owner_id: 26
 | |
|   owner_name: org26
 | |
|   lower_name: repo_external_tracker_numeric
 | |
|   name: repo_external_tracker_numeric
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 48
 | |
|   owner_id: 26
 | |
|   owner_name: org26
 | |
|   lower_name: repo_external_tracker_alpha
 | |
|   name: repo_external_tracker_alpha
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   num_pulls: 1
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 49
 | |
|   owner_id: 27
 | |
|   owner_name: user27
 | |
|   lower_name: repo49
 | |
|   name: repo49
 | |
|   is_private: false
 | |
|   num_stars: 0
 | |
|   num_forks: 0
 | |
|   num_issues: 0
 | |
|   is_mirror: false
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 50
 | |
|   owner_id: 30
 | |
|   owner_name: user30
 | |
|   lower_name: repo50
 | |
|   name: repo50
 | |
|   is_archived: false
 | |
|   is_empty: false
 | |
|   is_private: false
 | |
|   num_issues: 1
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_milestones: 0
 | |
|   num_closed_milestones: 0
 | |
|   num_watches: 0
 | |
|   num_projects: 0
 | |
|   num_closed_projects: 0
 | |
|   status: 0
 | |
| 
 | |
| -
 | |
|   id: 51
 | |
|   owner_id: 30
 | |
|   owner_name: user30
 | |
|   lower_name: repo51
 | |
|   name: repo51
 | |
|   is_archived: true
 | |
|   is_empty: false
 | |
|   is_private: false
 | |
|   num_issues: 1
 | |
|   num_closed_issues: 0
 | |
|   num_pulls: 0
 | |
|   num_closed_pulls: 0
 | |
|   num_milestones: 0
 | |
|   num_closed_milestones: 0
 | |
|   num_watches: 0
 | |
|   num_projects: 0
 | |
|   num_closed_projects: 0
 | |
|   status: 0 |