New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added issue search via api #3612

Merged
merged 23 commits into from Mar 7, 2018

Conversation

@kolaente
Copy link
Member

kolaente commented Mar 2, 2018

This PR adds the ability to search for issues via the api. The code is taken from the normal issue search in the GUI.

kolaente added some commits Mar 1, 2018

kolaente added some commits Mar 2, 2018

fmt
@codecov-io

This comment has been minimized.

Copy link

codecov-io commented Mar 2, 2018

Codecov Report

Merging #3612 into master will increase coverage by 0.01%.
The diff coverage is 75%.

Impacted file tree graph

@@            Coverage Diff            @@
##           master   #3612      +/-   ##
=========================================
+ Coverage   35.88%   35.9%   +0.01%     
=========================================
  Files         286     286              
  Lines       41294   41312      +18     
=========================================
+ Hits        14820   14832      +12     
- Misses      24294   24299       +5     
- Partials     2180    2181       +1
Impacted Files Coverage Δ
routers/api/v1/repo/issue.go 37.83% <75%> (+2.15%) ⬆️
models/repo_indexer.go 48.3% <0%> (ø) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d71f510...34918c6. Read the comment docs.

@tboerger tboerger added the lgtm/need 2 label Mar 2, 2018

@@ -1819,6 +1819,12 @@
"in": "path",
"required": true
},
{

This comment has been minimized.

@sapk

sapk Mar 2, 2018

Member

This should not be edited manually but generated base on code comments at start of ListIssues func.
Once the comments are added. Use make generate-swagger to re-generate this file.

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Ah ok, I didn't know that. I'll do ASAP

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Done.

@@ -5,13 +5,15 @@
package repo

import (
"bytes"

This comment has been minimized.

@sapk

sapk Mar 2, 2018

Member

~~~You need to do go fmt ./... or make fmt to fix code format issue.~~~
You allready done it.

kolaente added some commits Mar 2, 2018

}
var issueIDs []int64
var err error
if len(keyword) > 0 {

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

I think you can do something like this:

if len(keyword) > 0 {
	issueIDs, err = indexer.SearchIssuesByKeyword(ctx.Repo.Repository.ID, keyword)
}

if len(keyword) == 0 || len(issueIDs) > 0 {
	issues, err = models.Issues(&models.IssuesOptions{
		RepoIDs:  []int64{ctx.Repo.Repository.ID},
		Page:     ctx.QueryInt("page"),
		PageSize: setting.UI.IssuePagingNum,
		IsClosed: isClosed,
		IssueIDs: issueIDs,
	})
}

(simple search function call where you can immediately return empty array instead of doing "if" would be cleaner...)

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Looks good, thanks

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Changed it

kolaente added some commits Mar 2, 2018

fmt
}
}

// Show the results if we either dont have a keyword or the issues found by said keyword are > 0

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

nit: This comment is not needed, its obvious from code

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Oh yeah you're right, I removed it.

issueIDs, err = indexer.SearchIssuesByKeyword(ctx.Repo.Repository.ID, keyword)

// Didn't found anything
if len(issueIDs) == 0 {

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

Not needed, issues is already empty

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

But if I don't define it there, I cannot access it in line 83 and 89

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

It is defined on line 65

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

I am talking about variable issues and if block.

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Ups, I though you were talking about defining the issues variable in line 65 😁

PageSize: setting.UI.IssuePagingNum,
IsClosed: isClosed,
})
// Define issues var

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

Remove comment pls

// Define issues var
var issues []*models.Issue

// Check for search

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

Remove comment pls

This comment has been minimized.

@kolaente

This comment has been minimized.

@Morlinest

Morlinest Mar 2, 2018

Member

I think its obvious from code

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

Yeah probably 🤔

This comment has been minimized.

@kolaente

kolaente Mar 2, 2018

Member

removed

kolaente added some commits Mar 2, 2018

@lunny lunny added this to the 1.5.0 milestone Mar 3, 2018

kolaente added some commits Mar 3, 2018

issueIDs, err = indexer.SearchIssuesByKeyword(ctx.Repo.Repository.ID, keyword)
}

if len(keyword) == 0 || len(issueIDs) > 0 {

This comment has been minimized.

@lunny

lunny Mar 3, 2018

Member

It seems this line is unnecessary.

This comment has been minimized.

@thehowl

thehowl Mar 3, 2018

Member

No, it's necessary, but a comment should be added to explain it. At this point, three outcomes are possible:

  1. No keywords were given
  2. Keywords were given, returned no results
  3. Keywords were given, returned some results.

This condition guards against condition 2, because otherwise models.Issues would just be called and would return all the issues as if no keyword was passed.

So, add comment:

// We don't fetch any issue if we have keywords, but SearchIssuesByKeyword returned no issue IDs.
// (In other words, we don't fetch issues if no issue matches our keywords)

This comment has been minimized.

@kolaente

kolaente Mar 3, 2018

Member

I'll add a comment.

This comment has been minimized.

@Morlinest

Morlinest Mar 3, 2018

Member

@thehowl you are right, but we should avoid using another function names (it can be changed and you can not track changes in comments) in comment, just explain "why" that code is needed. IMO your last part is enough:

// Don't fetch issues if no issue matches keyword

This comment has been minimized.

@kolaente

kolaente Mar 3, 2018

Member

@Morlinest I've added a comment explaining it.

@thehowl
Copy link
Member

thehowl left a comment

Minor changes.

var issues []*models.Issue

keyword := strings.Trim(ctx.Query("q"), " ")
if bytes.Contains([]byte(keyword), []byte{0x00}) {

This comment has been minimized.

@thehowl

thehowl Mar 3, 2018

Member

strings.IndexByte(keyword, 0)

issueIDs, err = indexer.SearchIssuesByKeyword(ctx.Repo.Repository.ID, keyword)
}

if len(keyword) == 0 || len(issueIDs) > 0 {

This comment has been minimized.

@thehowl

thehowl Mar 3, 2018

Member

No, it's necessary, but a comment should be added to explain it. At this point, three outcomes are possible:

  1. No keywords were given
  2. Keywords were given, returned no results
  3. Keywords were given, returned some results.

This condition guards against condition 2, because otherwise models.Issues would just be called and would return all the issues as if no keyword was passed.

So, add comment:

// We don't fetch any issue if we have keywords, but SearchIssuesByKeyword returned no issue IDs.
// (In other words, we don't fetch issues if no issue matches our keywords)

kolaente added some commits Mar 3, 2018

var issues []*models.Issue

keyword := strings.Trim(ctx.Query("q"), " ")
if strings.IndexByte(keyword, 0) > 0 {

This comment has been minimized.

@thehowl

thehowl Mar 3, 2018

Member

Change to >= or != -1 (Doesn't guard against \x00 being the first byte)

This comment has been minimized.

@kolaente

kolaente Mar 3, 2018

Member

ok thanks, I didn't know about that.

@thehowl

thehowl approved these changes Mar 3, 2018

Copy link
Member

thehowl left a comment

LGTM

@tboerger tboerger added lgtm/need 1 and removed lgtm/need 2 labels Mar 3, 2018

@lunny

lunny approved these changes Mar 4, 2018

@tboerger tboerger added lgtm/done and removed lgtm/need 1 labels Mar 4, 2018

@lunny

This comment has been minimized.

Copy link
Member

lunny commented Mar 4, 2018

need @Morlinest and @sapk 's approvals.

@sapk

sapk approved these changes Mar 5, 2018

Copy link
Member

sapk left a comment

Thanks for the PR.

@sapk

This comment has been minimized.

Copy link
Member

sapk commented Mar 7, 2018

@lafriks CI fail is because Drone fail to pull the repo.

@lunny

This comment has been minimized.

Copy link
Member

lunny commented Mar 7, 2018

@sapk restarted.

@lafriks lafriks merged commit 1a83581 into go-gitea:master Mar 7, 2018

3 checks passed

Codacy/PR Quality Review Good work! A positive pull request.
Details
approvals/lgtm this commit looks good
continuous-integration/drone/pr the build was successful
Details
@kolaente

This comment has been minimized.

Copy link
Member

kolaente commented Mar 7, 2018

Thanks!

@kolaente kolaente deleted the kolaente:feature/api-issue-search branch Mar 7, 2018

@lafriks lafriks added the changelog label Apr 11, 2018

aswild added a commit to aswild/gitea that referenced this pull request Jul 6, 2018

Merge tag 'v1.5.0-rc1' into wild/v1.5
* SECURITY
  * Limit uploaded avatar image-size to 4096x3072 by default (go-gitea#4353)
  * Do not allow to reuse TOTP passcode (go-gitea#3878)
* FEATURE
  * Add cli commands to regen hooks & keys (go-gitea#3979)
  * Add support for FIDO U2F (go-gitea#3971)
  * Added user language setting (go-gitea#3875)
  * LDAP Public SSH Keys synchronization (go-gitea#1844)
  * Add topic support (go-gitea#3711)
  * Multiple assignees (go-gitea#3705)
  * Add protected branch whitelists for merging (go-gitea#3689)
  * Global code search support (go-gitea#3664)
  * Add label descriptions (go-gitea#3662)
  * Add issue search via API (go-gitea#3612)
  * Add repository setting to enable/disable health checks (go-gitea#3607)
  * Emoji Autocomplete (go-gitea#3433)
  * Implements generator cli for secrets (go-gitea#3531)
* ENHANCEMENT
  * Add more webhooks support and refactor webhook templates directory (go-gitea#3929)
  * Add new option to allow only OAuth2/OpenID user registration (go-gitea#3910)
  * Add option to use paged LDAP search when synchronizing users (go-gitea#3895)
  * Symlink icons (go-gitea#1416)
  * Improve release page UI (go-gitea#3693)
  * Add admin dashboard option to run health checks (go-gitea#3606)
  * Add branch link in branch list (go-gitea#3576)
  * Reduce sql query times in retrieveFeeds (go-gitea#3547)
  * Option to enable or disable swagger endpoints (go-gitea#3502)
  * Add missing licenses (go-gitea#3497)
  * Reduce repo indexer disk usage (go-gitea#3452)
  * Enable caching on assets and avatars (go-gitea#3376)
  * Add repository search ordered by stars/forks. Forks column in admin repo list (go-gitea#3969)
  * Add Environment Variables to Docker template (go-gitea#4012)
  * LFS: make HTTP auth period configurable (go-gitea#4035)
  * Add config path as an optionial flag when changing pass via CLI (go-gitea#4184)
  * Refactor User Settings sections (go-gitea#3900)
  * Allow square brackets in external issue patterns (go-gitea#3408)
  * Add Attachment API (go-gitea#3478)
  * Add EnableTimetracking option to app settings (go-gitea#3719)
  * Add config option to enable or disable log executed SQL (go-gitea#3726)
  * Shows total tracked time in issue and milestone list (go-gitea#3341)
* TRANSLATION
  * Improve English grammar and consistency (go-gitea#3614)
* DEPLOYMENT
  * Allow Gitea to run as different USER in Docker (go-gitea#3961)
  * Provide compressed release binaries (go-gitea#3991)
  * Sign release binaries (go-gitea#4188)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment