{"thread":{"id":"17673","subject":"[PATCH JGIT] Propose author and committer in the commit dialog","startedAt":"2009-02-09T13:51:11Z","lastAt":"2009-02-09T13:51:11Z","messageCount":1,"participants":["Yann Simon"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"103840","messageId":"499034CF.5010209@gmail.com","threadId":"17673","inReplyTo":null,"subject":"[PATCH JGIT] Propose author and committer in the commit dialog","fromName":"Yann Simon","fromEmail":"yann.simon.fr@gmail.com","sentAt":"2009-02-09T13:51:11Z","receivedAt":"2009-02-09T13:51:11Z","isPatch":true,"sender":{"key":"yann.simon.fr@gmail.com","avatar":"https://gravatar.com/avatar/2d926895d27ac988c5c8e591887e5a6a4c7036390403c74fce92519119b887a0?d=mp&s=160"},"body":"Add a field 'committer'.\nThe fields 'author' and 'committer' are populated with the values\nfound in the configuration.\n\nThe author and the committer are validated against empty values\nbefore accepting the commit.\n\nSigned-off-by: Yann Simon <yann.simon.fr@gmail.com>\n---\nI reduced the number of changes for better reviewing.\n\n .../src/org/spearce/egit/ui/UIText.java            |    6 ++\n .../egit/ui/internal/actions/CommitAction.java     |   46 +++++++++---------\n .../egit/ui/internal/dialogs/CommitDialog.java     |   50 ++++++++++++++++++-\n .../src/org/spearce/egit/ui/uitext.properties      |    2 +\n 4 files changed, 77 insertions(+), 27 deletions(-)\n\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java\nindex d74f53e..249f2a0 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java\n@@ -584,6 +584,9 @@\n \tpublic static String CommitDialog_CommitChanges;\n \n \t/** */\n+\tpublic static String CommitDialog_Committer;\n+\n+\t/** */\n \tpublic static String CommitDialog_CommitMessage;\n \n \t/** */\n@@ -596,6 +599,9 @@\n \tpublic static String CommitDialog_ErrorInvalidAuthorSpecified;\n \n \t/** */\n+\tpublic static String CommitDialog_ErrorInvalidCommitterSpecified;\n+\n+\t/** */\n \tpublic static String CommitDialog_ErrorMustEnterCommitMessage;\n \n \t/** */\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java\nindex d30172f..97aa60f 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/CommitAction.java\n@@ -99,15 +99,16 @@ public void run(IAction act) {\n \t\t}\n \n \t\tString author = null;\n+\t\tString committer = null;\n \t\tif (repository != null) {\n \t\t\tfinal RepositoryConfig config = repository.getConfig();\n \t\t\tauthor = config.getAuthorName();\n-\t\t\tif (author != null && author.length() != 0) {\n-\t\t\t\tfinal String email = config.getAuthorEmail();\n-\t\t\t\tif (email != null && email.length() != 0) {\n-\t\t\t\t\tauthor = author + \" <\" + email + \">\";\n-\t\t\t\t}\n-\t\t\t}\n+\t\t\tfinal String authorEmail = config.getAuthorEmail();\n+\t\t\tauthor = author + \" <\" + authorEmail + \">\";\n+\n+\t\t\tcommitter = config.getCommitterName();\n+\t\t\tfinal String committerEmail = config.getCommitterEmail();\n+\t\t\tcommitter = committer + \" <\" + committerEmail + \">\";\n \t\t}\n \n \t\tloadPreviousCommit();\n@@ -117,6 +118,7 @@ public void run(IAction act) {\n \t\tcommitDialog.setAmendAllowed(amendAllowed);\n \t\tcommitDialog.setFileList(files);\n \t\tcommitDialog.setAuthor(author);\n+\t\tcommitDialog.setCommitter(committer);\n \n \t\tif (previousCommit != null) {\n \t\t\tcommitDialog.setPreviousCommitMessage(previousCommit.getMessage());\n@@ -181,6 +183,15 @@ private void performCommit(CommitDialog commitDialog, String commitMessage)\n \n \tprivate String doCommits(CommitDialog commitDialog, String commitMessage,\n \t\t\tHashMap<Repository, Tree> treeMap) throws IOException, TeamException {\n+\n+\t\tString author = commitDialog.getAuthor();\n+\t\tString committer = commitDialog.getCommitter();\n+\t\tDate commitDate = new Date(Calendar.getInstance().getTimeInMillis());\n+\t\tTimeZone timeZone = TimeZone.getDefault();\n+\n+\t\tPersonIdent authorIdent = new PersonIdent(author);\n+\t\tPersonIdent committerIdent = new PersonIdent(committer);\n+\n \t\tfor (java.util.Map.Entry<Repository, Tree> entry : treeMap.entrySet()) {\n \t\t\tTree tree = entry.getValue();\n \t\t\tRepository repo = tree.getRepository();\n@@ -199,26 +210,13 @@ private String doCommits(CommitDialog commitDialog, String commitMessage,\n \t\t\tCommit commit = new Commit(repo, parentIds);\n \t\t\tcommit.setTree(tree);\n \t\t\tcommitMessage = commitMessage.replaceAll(\"\\r\", \"\\n\");\n+\t\t\tif (commitDialog.isSignedOff())\n+\t\t\t\tcommitMessage += \"\\n\\nSigned-off-by: \" + committerIdent.getName() + \" <\"\n+\t\t\t\t\t\t\t\t+ committerIdent.getEmailAddress() + \">\";\n \n-\t\t\tPersonIdent personIdent = new PersonIdent(repo);\n-\t\t\tString username = personIdent.getName();\n-\t\t\tString email = personIdent.getEmailAddress();\n-\n-\t\t\tif (commitDialog.isSignedOff()) {\n-\t\t\t\tcommitMessage += \"\\n\\nSigned-off-by: \" + username + \" <\"\n-\t\t\t\t\t\t+ email + \">\";\n-\t\t\t}\n \t\t\tcommit.setMessage(commitMessage);\n-\n-\t\t\tif (commitDialog.getAuthor() == null) {\n-\t\t\t\tcommit.setAuthor(personIdent);\n-\t\t\t} else {\n-\t\t\t\tPersonIdent author = new PersonIdent(commitDialog.getAuthor());\n-\t\t\t\tcommit.setAuthor(new PersonIdent(author, new Date(Calendar\n-\t\t\t\t\t\t.getInstance().getTimeInMillis()), TimeZone\n-\t\t\t\t\t\t.getDefault()));\n-\t\t\t}\n-\t\t\tcommit.setCommitter(personIdent);\n+\t\t\tcommit.setAuthor(new PersonIdent(authorIdent, commitDate, timeZone));\n+\t\t\tcommit.setCommitter(new PersonIdent(committerIdent, commitDate, timeZone));\n \n \t\t\tObjectWriter writer = new ObjectWriter(repo);\n \t\t\tcommit.setCommitId(writer.writeCommit(commit));\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/CommitDialog.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/CommitDialog.java\nindex b122fb8..9d062cc 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/CommitDialog.java\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/CommitDialog.java\n@@ -129,6 +129,7 @@ createButton(parent, IDialogConstants.CANCEL_ID,\n \n \tText commitText;\n \tText authorText;\n+\tText committerText;\n \tButton amendingButton;\n \tButton signedOffButton;\n \n@@ -170,6 +171,12 @@ public void keyPressed(KeyEvent arg0) {\n \t\tif (author != null)\n \t\t\tauthorText.setText(author);\n \n+\t\tnew Label(container, SWT.LEFT).setText(UIText.CommitDialog_Committer);\n+\t\tcommitterText = new Text(container, SWT.BORDER);\n+\t\tcommitterText.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());\n+\t\tif (committer != null)\n+\t\t\tcommitterText.setText(committer);\n+\n \t\tamendingButton = new Button(container, SWT.CHECK);\n \t\tif (amending) {\n \t\t\tamendingButton.setSelection(amending);\n@@ -336,6 +343,7 @@ public void setCommitMessage(String s) {\n \n \tprivate String commitMessage = \"\"; //$NON-NLS-1$\n \tprivate String author = null;\n+\tprivate String committer = null;\n \tprivate String previousAuthor = null;\n \tprivate boolean signedOff = false;\n \tprivate boolean amending = false;\n@@ -400,6 +408,7 @@ public void widgetSelected(SelectionEvent e) {\n \tprotected void okPressed() {\n \t\tcommitMessage = commitText.getText();\n \t\tauthor = authorText.getText().trim();\n+\t\tcommitter = committerText.getText().trim();\n \t\tsignedOff = signedOffButton.getSelection();\n \t\tamending = amendingButton.getSelection();\n \n@@ -413,14 +422,33 @@ protected void okPressed() {\n \t\t\treturn;\n \t\t}\n \n+\t\tboolean authorValid = false;\n \t\tif (author.length() > 0) {\n \t\t\ttry {\n \t\t\t\tnew PersonIdent(author);\n+\t\t\t\tauthorValid = true;\n+\t\t\t} catch (IllegalArgumentException e) {\n+\t\t\t\tauthorValid = false;\n+\t\t\t}\n+\t\t}\n+\t\tif (!authorValid) {\n+\t\t\tMessageDialog.openWarning(getShell(), UIText.CommitDialog_ErrorInvalidAuthor, UIText.CommitDialog_ErrorInvalidAuthorSpecified);\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tboolean committerValid = false;\n+\t\tif (committer.length() > 0) {\n+\t\t\ttry {\n+\t\t\t\tnew PersonIdent(committer);\n+\t\t\t\tcommitterValid = true;\n \t\t\t} catch (IllegalArgumentException e) {\n-\t\t\t\tMessageDialog.openWarning(getShell(), UIText.CommitDialog_ErrorInvalidAuthor, UIText.CommitDialog_ErrorInvalidAuthorSpecified);\n-\t\t\t\treturn;\n+\t\t\t\tcommitterValid = false;\n \t\t\t}\n-\t\t} else author = null;\n+\t\t}\n+\t\tif (!committerValid) {\n+\t\t\tMessageDialog.openWarning(getShell(), UIText.CommitDialog_ErrorInvalidAuthor, UIText.CommitDialog_ErrorInvalidCommitterSpecified);\n+\t\t\treturn;\n+\t\t}\n \n \t\tif (selectedFiles.isEmpty() && !amending) {\n \t\t\tMessageDialog.openWarning(getShell(), UIText.CommitDialog_ErrorNoItemsSelected, UIText.CommitDialog_ErrorNoItemsSelectedToBeCommitted);\n@@ -473,6 +501,22 @@ public void setAuthor(String author) {\n \t}\n \n \t/**\n+\t * @return The committer to set for the commit\n+\t */\n+\tpublic String getCommitter() {\n+\t\treturn committer;\n+\t}\n+\n+\t/**\n+\t * Pre-set committer for the commit\n+\t *\n+\t * @param committer\n+\t */\n+\tpublic void setCommitter(String committer) {\n+\t\tthis.committer = committer;\n+\t}\n+\n+\t/**\n \t * Pre-set the previous author if amending the commit\n \t *\n \t * @param previousAuthor\ndiff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties b/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties\nindex 52fa4f8..142b426 100644\n--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties\n+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties\n@@ -226,10 +226,12 @@ CommitDialog_AmendPreviousCommit=A&mend previous commit\n CommitDialog_Author=&Author:\n CommitDialog_Commit=&Commit\n CommitDialog_CommitChanges=Commit Changes\n+CommitDialog_Committer=Committer:\n CommitDialog_CommitMessage=Commit &Message:\n CommitDialog_DeselectAll=&Deselect All\n CommitDialog_ErrorInvalidAuthor=Invalid author\n CommitDialog_ErrorInvalidAuthorSpecified=Invalid author specified. Please use the form:\\nA U Thor <author@example.com>\n+CommitDialog_ErrorInvalidCommitterSpecified=Invalid committer specified. Please use the form:\\nCommi T Ter <committer@example.com>\n CommitDialog_ErrorMustEnterCommitMessage=You must enter a commit message\n CommitDialog_ErrorNoItemsSelected=No items selected\n CommitDialog_ErrorNoItemsSelectedToBeCommitted=No items are currently selected to be committed.\n-- \n1.6.0.4\n"}]}