Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Create comments in JIRA after create and update by MorganEPatch · Pull Request #6 · coreos/issue-sync · GitHub
Skip to content
This repository was archived by the owner on Sep 21, 2023. It is now read-only.

Create comments in JIRA after create and update - #6

Merged
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments
Jul 20, 2017
Merged

Create comments in JIRA after create and update#6
MorganEPatch merged 1 commit into
coreos:masterfrom
MorganEPatch:create-comments

Conversation

@MorganEPatch

@MorganEPatchMorganEPatch commented Jul 11, 2017

Copy link
Copy Markdown
Contributor

This PR builds on #4, and is thus blocked on it.

This PR adds the createComments() function, which adds any new comments on a given GitHub issue to the to given JIRA issue, and updates existing issues if they've been edited on GitHub. Currently, the comment is made by the user under which the tool is running.

@MorganEPatchMorganEPatch self-assigned this Jul 11, 2017
@MorganEPatchMorganEPatch mentioned this pull request Jul 17, 2017

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good overall, however, the updateComment, createComment etc functions must be broken out into a new file, preferably in a new package. this file in unwieldy and contains code that is not relevant to cmd handling

Comment threadcmd/root.go
}

ctx := context.Background()
repo := strings.Split(rootCmdCfg.GetString("repo-name"), "/")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do this same parsing in multiple places. repo should be a field on a config object so it can be reused.

Comment threadcmd/root.go Outdated
return err
}

res, err := jClient.Do(req, nil) // Response should be 204 No Content

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if it should be 204, why not confirm it by comparing to http.StatusNoContent?

Comment threadcmd/root.go Outdated
res, err := jClient.Do(req, nil) // Response should be 204 No Content
if err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do not ignore the error returned by ReadAll; handle it as necessary

Comment threadcmd/root.go Outdated
return err
} else if err = jira.CheckResponse(res.Response); err != nil {
log.Errorf("Error updating comment: %s", err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

Comment threadcmd/root.go Outdated
jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

almost there

Comment threadcmd/root.go Outdated
if err := updateIssue(*ghIssue, jIssue, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %v", jIssue.Key, err)
if err := updateIssue(*ghIssue, jIssue, ghClient, jiraClient); err != nil {
log.Errorf("Error updating issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you format the error with %v

Comment threadcmd/root.go Outdated
Direction: "asc",
})
if err != nil {
log.Errorf("Error retrieving GitHub comments for issue #%d. Error: %s.", *ghIssue.Number, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment threadcmd/root.go Outdated

user, _, err := ghClient.Users.Get(context.Background(), *ghComment.User.Login)
if err != nil {
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same formatting change here.

Comment threadcmd/root.go
log.Errorf("Error retrieving GitHub user %s. Error: %s", *ghComment.User.Login, err)
}
body := fmt.Sprintf("Comment (ID %d) from GitHub user %s", *ghComment.ID, user.GetLogin())
if user.GetName() != "" {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To simplify this a little bit, how about making the only bit that is conditioned on GetName() != "" be the part that actually appends the username:

ifuser.GetName() !="" {
body-fmt.Sprintf("%s (%s)", body, user.GetName())
}
body=fmt.Sprintf(
"%s at %s:\n\n%s",
body,
ghComment.CreatedAt.Format(commentDateFormat),
*ghComment.Body,
)

This cleans up the logic, de-dupes the code and shortens everything a little.

Comment threadcmd/root.go
Body: body,
}

req, err := jClient.NewRequest("PUT", fmt.Sprintf("rest/api/2/issue/%s/comment/%s", jIssue.Key, jComment.ID), request)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add a TODO

TODO(LyonesGamer): abstract this into its own method

Comment threadcmd/root.go Outdated

jComment, res, err := jClient.Issue.AddComment(jIssue.ID, jComment)
if err != nil {
log.Errorf("Error creating JIRA comment on issue %s. Error: %s", jIssue.Key, err)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

%v

Comment threadcmd/root.go
}
found = true

updateComment(*ghComment, jComment, jIssue, ghClient, jClient)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you have 20 Jira comments and you find the GitHub comment on the first 1, you will loop over the remaining 19 comments. Instead, you should break after updateComment.

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = make([]jira.Comment, 0)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you do not need to call make on the slice; in fact, you are allocating an array that will never be used. if you need to append elements to the slice, the built-in append function will lazily allocate and re-allocate a backing array for the slice as needed.

Comment threadcmd/root.go Outdated
"time"

"regexp"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should not be any newlines between these stdlibs

Comment threadcmd/root.go Outdated
"strconv"

"net/http"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this newline separating stdlib and remote imports is good

Comment threadcmd/root.go Outdated
var comments []jira.Comment
if issue.Fields.Comments == nil {
log.Debugf("JIRA issue %s has no comments.", jIssue.Key)
comments = nil

@squatsquatJul 20, 2017

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you should delete this line entirely; it is not needed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. Yep, that's a holdover from C programming, and the assumption that var comments []jira.Comment will leave comments uninitialized and unusable.

@squat

squat commented Jul 20, 2017

Copy link
Copy Markdown
Contributor

Thanks for making those changes. Thoughts on: #6 (comment)?

@squat

Copy link
Copy Markdown
Contributor

@LyonesGamer one last thing: #6 (comment)

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

Oops. Can't believe I missed that one.

@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat 👍

@squatsquat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just gave it one last look and I found two last things that slipped through. Once these are done, lets squash and merge.

Comment threadcmd/root.go Outdated
if err != nil {
log.Errorf("Error updating JIRA issue %s: %v", jIssue.Key, err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized this one slipped through the cracks

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hate it when I accidentally revert a fix I've already made... 😞

Comment threadcmd/root.go Outdated
log.Errorf("Error creating JIRA issue: %s", err)
log.Errorf("Error creating JIRA issue: %v", err)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this one too

This PR adds the createComments, createComment, and updateComment
functions, which add any new comments from a GitHub issue to a
JIRA issue, and updates existing ones if they've been edited.
The comments are created by the user running the tool; a header
will be created to track metadata.
@MorganEPatch

Copy link
Copy Markdown
ContributorAuthor

@squat Fixed, squashed, and ready to merge!

@squat

Copy link
Copy Markdown
Contributor

:shipit:

@MorganEPatch
MorganEPatch merged commit 99678ca into coreos:masterJul 20, 2017
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MorganEPatch@squat