git-gui: Teach sign off to be more intelligent.

When we sign off on a commit we want to add a blank line between
whatever is in the commit buffer and the new Signed-off-by line,
unless there already is a Signed-off-by (or Acked-by) tag at the end
of the buffer already.  This change makes us do the right thing more
often.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
diff --git a/git-gui b/git-gui
index 9a259c0..8a42c97 100755
--- a/git-gui
+++ b/git-gui
@@ -1510,10 +1510,15 @@
 		}
 	}
 
-	set str "Signed-off-by: $GIT_COMMITTER_IDENT"
-	if {[$ui_comm get {end -1c linestart} {end -1c}] != $str} {
+	set sob "Signed-off-by: $GIT_COMMITTER_IDENT"
+	set last [$ui_comm get {end -1c linestart} {end -1c}]
+	if {$last != $sob} {
 		$ui_comm edit separator
-		$ui_comm insert end "\n$str"
+		if {$last != {}
+			&& ![regexp {^[A-Z][A-Za-z]*-[A-Za-z-]+: *} $last]} {
+			$ui_comm insert end "\n"
+		}
+		$ui_comm insert end "\n$sob"
 		$ui_comm edit separator
 		$ui_comm see end
 	}