From 8420c729a0a8b55b5a9c9eae1064a2333de7d188 Mon Sep 17 00:00:00 2001 From: Markus Keller Date: Tue, 16 Oct 2018 16:25:56 +0200 Subject: [PATCH] Make PrePushHook properly terminate ref lines 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 --- .../tst/org/eclipse/jgit/api/PushCommandTest.java | 2 +- .../src/org/eclipse/jgit/hooks/PrePushHook.java | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java index ca86d81301..98dfcc083e 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PushCommandTest.java @@ -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)); } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java index 051a1d1c81..431944f9d4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/hooks/PrePushHook.java @@ -164,12 +164,7 @@ public class PrePushHook extends GitHook { */ public void setRefs(Collection 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 { ObjectId ooid = u.getExpectedOldObjectId(); b.append((ooid == null) ? ObjectId.zeroId().getName() : ooid .getName()); + b.append("\n"); //$NON-NLS-1$ } refs = b.toString(); } -- 2.39.5