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>tags/v5.2.0.201811281532-m3
git1.push().setRemote("test").setRefSpecs(spec).call(); | git1.push().setRemote("test").setRefSpecs(spec).call(); | ||||
assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master " | assertEquals("1:test, 2:" + uri + ", 3:\n" + "refs/heads/master " | ||||
+ commit.getName() + " refs/heads/x " | + commit.getName() + " refs/heads/x " | ||||
+ ObjectId.zeroId().name(), read(hookOutput)); | |||||
+ ObjectId.zeroId().name() + "\n", read(hookOutput)); | |||||
} | } | ||||
} | } | ||||
*/ | */ | ||||
public void setRefs(Collection<RemoteRefUpdate> toRefs) { | public void setRefs(Collection<RemoteRefUpdate> toRefs) { | ||||
StringBuilder b = new StringBuilder(); | StringBuilder b = new StringBuilder(); | ||||
boolean first = true; | |||||
for (RemoteRefUpdate u : toRefs) { | for (RemoteRefUpdate u : toRefs) { | ||||
if (!first) | |||||
b.append("\n"); //$NON-NLS-1$ | |||||
else | |||||
first = false; | |||||
b.append(u.getSrcRef()); | b.append(u.getSrcRef()); | ||||
b.append(" "); //$NON-NLS-1$ | b.append(" "); //$NON-NLS-1$ | ||||
b.append(u.getNewObjectId().getName()); | b.append(u.getNewObjectId().getName()); | ||||
ObjectId ooid = u.getExpectedOldObjectId(); | ObjectId ooid = u.getExpectedOldObjectId(); | ||||
b.append((ooid == null) ? ObjectId.zeroId().getName() : ooid | b.append((ooid == null) ? ObjectId.zeroId().getName() : ooid | ||||
.getName()); | .getName()); | ||||
b.append("\n"); //$NON-NLS-1$ | |||||
} | } | ||||
refs = b.toString(); | refs = b.toString(); | ||||
} | } |