summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-08-22 19:22:36 -0700
committerShawn O. Pearce <sop@google.com>2009-08-22 19:22:36 -0700
commitf2ac67d9d99102aab4d5ec1094cc2051f442e9e7 (patch)
treee7158a0ac354f83981ac9e3a9f13c4b99375a76f
parent98fc90ab95f5ddd1480f489c4bde11eca7d6fa79 (diff)
Embed Gerrit's version number into shell scripts copied by scp
When copying a shell script through the internal scp server, inject the current version of the software into the header of the file. This may help end users who wind up with a copy, as they at least know what version of Gerrit they obtained it from. Change-Id: I449a5ee724e12bede2003ac76629fbedc80ff2f0 Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--src/main/java/com/google/gerrit/server/ssh/commands/ScpCommand.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/main/java/com/google/gerrit/server/ssh/commands/ScpCommand.java b/src/main/java/com/google/gerrit/server/ssh/commands/ScpCommand.java
index 7ff89c50a5..04f892e291 100644
--- a/src/main/java/com/google/gerrit/server/ssh/commands/ScpCommand.java
+++ b/src/main/java/com/google/gerrit/server/ssh/commands/ScpCommand.java
@@ -22,10 +22,12 @@
*/
package com.google.gerrit.server.ssh.commands;
+import com.google.gerrit.pgm.Version;
import com.google.gerrit.server.ssh.BaseCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.spearce.jgit.util.RawParseUtils;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
@@ -235,11 +237,28 @@ final class ScpCommand extends BaseCommand {
}
private void readFile(final Entry ent) throws IOException {
- final byte[] data = read(ent.path);
+ byte[] data = read(ent.path);
if (data == null) {
throw new FileNotFoundException(ent.path);
}
+ if (data.length > 3 && data[0] == '#' && data[1] == '!' && data[2] == '/') {
+ // Embed Gerrit's version number into the top of the script.
+ //
+ final String version = Version.getVersion();
+ final int lf = RawParseUtils.nextLF(data, 0);
+ if (version != null && lf < data.length) {
+ final byte[] versionHeader =
+ ("# From Gerrit Code Review " + version + "\n").getBytes("UTF-8");
+ final ByteArrayOutputStream buf;
+ buf = new ByteArrayOutputStream(data.length + versionHeader.length);
+ buf.write(data, 0, lf);
+ buf.write(versionHeader);
+ buf.write(data, lf, data.length - lf);
+ data = buf.toByteArray();
+ }
+ }
+
header(ent, data.length);
readAck();