The user can see and edit the signed-off in the commit dialog before committing. For new lines in the commit dialog, use Text.DELIMITER for plateform neutrality. Signed-off-by: Yann Simon <yann.simon.fr@xxxxxxxxx> --- This patch only applies after the 2 previous patches. If you want to, I could probably modify this patch so that it would apply on the current origin. .../egit/ui/internal/actions/CommitAction.java | 10 +----- .../egit/ui/internal/dialogs/CommitDialog.java | 29 +++++++++++++++++++- 2 files changed, 30 insertions(+), 9 deletions(-) diff --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 index 97aa60f..6aff07e 100644 --- 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 @@ -172,7 +172,7 @@ private void performCommit(CommitDialog commitDialog, String commitMessage) } try { - commitMessage = doCommits(commitDialog, commitMessage, treeMap); + doCommits(commitDialog, commitMessage, treeMap); } catch (IOException e) { throw new TeamException("Committing changes", e); } @@ -181,7 +181,7 @@ private void performCommit(CommitDialog commitDialog, String commitMessage) } } - private String doCommits(CommitDialog commitDialog, String commitMessage, + private void doCommits(CommitDialog commitDialog, String commitMessage, HashMap<Repository, Tree> treeMap) throws IOException, TeamException { String author = commitDialog.getAuthor(); @@ -209,11 +209,6 @@ private String doCommits(CommitDialog commitDialog, String commitMessage, } Commit commit = new Commit(repo, parentIds); commit.setTree(tree); - commitMessage = commitMessage.replaceAll("\r", "\n"); - if (commitDialog.isSignedOff()) - commitMessage += "\n\nSigned-off-by: " + committerIdent.getName() + " <" - + committerIdent.getEmailAddress() + ">"; - commit.setMessage(commitMessage); commit.setAuthor(new PersonIdent(authorIdent, commitDate, timeZone)); commit.setCommitter(new PersonIdent(committerIdent, commitDate, timeZone)); @@ -229,7 +224,6 @@ private String doCommits(CommitDialog commitDialog, String commitMessage, + " to commit " + commit.getCommitId() + "."); } } - return commitMessage; } private void prepareTrees(IFile[] selectedItems, diff --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 index 9d062cc..8f85c08 100644 --- 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 @@ -17,6 +17,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.Iterator; +import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -67,6 +68,8 @@ */ public class CommitDialog extends Dialog { + private static Pattern signedOffPattern = Pattern.compile("(.|\r|\n)*Signed-off-by: .*(\r|\n)*"); //$NON-NLS-1$ + class CommitContentProvider implements IStructuredContentProvider { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { @@ -214,6 +217,30 @@ public void widgetDefaultSelected(SelectionEvent arg0) { signedOffButton.setText(UIText.CommitDialog_AddSOB); signedOffButton.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).span(2, 1).create()); + signedOffButton.addSelectionListener(new SelectionListener() { + boolean alreadySigned = false; + public void widgetSelected(SelectionEvent arg0) { + if (alreadySigned) + return; + if (signedOffButton.getSelection()) { + alreadySigned = true; + String curText = commitText.getText(); + + // add new lines if necessary + if (!curText.endsWith(Text.DELIMITER)) + curText += Text.DELIMITER; + + // if the last line is not a signed off (amend a commit), add a line break + if (!signedOffPattern.matcher(new StringBuilder(curText)).matches()) + curText += Text.DELIMITER; + commitText.setText(curText + "Signed-off-by: " + committerText.getText()); //$NON-NLS-1$ + } + } + + public void widgetDefaultSelected(SelectionEvent arg0) { + // Empty + } + }); Table resourcesTable = new Table(container, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI | SWT.CHECK | SWT.BORDER); resourcesTable.setLayoutData(GridDataFactory.fillDefaults().hint(600, @@ -330,7 +357,7 @@ private static String getFileStatus(IFile file) { * @return The message the user entered */ public String getCommitMessage() { - return commitMessage; + return commitMessage.replaceAll(Text.DELIMITER, "\n"); //$NON-NLS-1$; } /** -- 1.6.0.4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html