]> source.dussan.org Git - jgit.git/commitdiff
Make PrePushHook properly terminate ref lines 90/130990/5
authorMarkus Keller <markus.kell.r@gmail.com>
Tue, 16 Oct 2018 14:25:56 +0000 (16:25 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Sun, 21 Oct 2018 21:07:58 +0000 (17:07 -0400)
All of the input lines passed to pre-push hook scripts must be properly
terminated by '\n', so that normal shell scripts like the git-supplied
pre-push.sample work properly, even when pushing just a single branch.

With the old code, hook scripts that use the following pattern didn't
process the last line, because 'read' has a non-zero exit status when
EOF is encountered:
  while read local_ref local_sha remote_ref remote_sha; do ... done

Change-Id: Id899662ed3fedef6c314fc4b2ddf91a6dcb98cbb
Signed-off-by: Markus Keller <markus.kell.r@gmail.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java

index ca86d81301792dc86a58ba6c461536edf027c10d..98dfcc083e9eb9cae55702a89bed252330f89f0a 100644 (file)
@@ -148,7 +148,7 @@ public class PushCommandTest extends RepositoryTestCase {
                        git1.push().setRemote("test").setRefSpecs(spec).call();
                        assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master "
                                        + commit.getName() + " refs/heads/x "
-                                       + ObjectId.zeroId().name(), read(hookOutput));
+                                       + ObjectId.zeroId().name() + "\n", read(hookOutput));
                }
        }
 
index 051a1d1c8193fea3565949fcfd9034062a08b6f1..431944f9d44cb65c62aebaf42bbf67a8fe65ba46 100644 (file)
@@ -164,12 +164,7 @@ public class PrePushHook extends GitHook<String> {
         */
        public void setRefs(Collection<RemoteRefUpdate> toRefs) {
                StringBuilder b = new StringBuilder();
-               boolean first = true;
                for (RemoteRefUpdate u : toRefs) {
-                       if (!first)
-                               b.append("\n"); //$NON-NLS-1$
-                       else
-                               first = false;
                        b.append(u.getSrcRef());
                        b.append(" "); //$NON-NLS-1$
                        b.append(u.getNewObjectId().getName());
@@ -179,6 +174,7 @@ public class PrePushHook extends GitHook<String> {
                        ObjectId ooid = u.getExpectedOldObjectId();
                        b.append((ooid == null) ? ObjectId.zeroId().getName() : ooid
                                        .getName());
+                       b.append("\n"); //$NON-NLS-1$
                }
                refs = b.toString();
        }