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>
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));
}
}
*/
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());
ObjectId ooid = u.getExpectedOldObjectId();
b.append((ooid == null) ? ObjectId.zeroId().getName() : ooid
.getName());
+ b.append("\n"); //$NON-NLS-1$
}
refs = b.toString();
}