diff options
Diffstat (limited to 'org.eclipse.jgit.pgm/src/org/eclipse/jgit')
82 files changed, 504 insertions, 274 deletions
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java index 681cf5d626..201fa3d22d 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java @@ -38,7 +38,6 @@ public class ConsoleAuthenticator extends CachedAuthenticator { private final Console cons = System.console(); - /** {@inheritDoc} */ @Override protected PasswordAuthentication promptPasswordAuthentication() { final String realm = formatRealm(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java index 63ce838f0b..5bdfc7bb51 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java @@ -43,13 +43,11 @@ public class ConsoleCredentialsProvider extends CredentialsProvider { private final Console cons = System.console(); - /** {@inheritDoc} */ @Override public boolean isInteractive() { return true; } - /** {@inheritDoc} */ @Override public boolean supports(CredentialItem... items) { for (CredentialItem i : items) { @@ -71,7 +69,6 @@ public class ConsoleCredentialsProvider extends CredentialsProvider { return true; } - /** {@inheritDoc} */ @Override public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java index 1115d2d113..4440e26f6d 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java @@ -14,8 +14,6 @@ package org.eclipse.jgit.pgm; -import static java.lang.Character.valueOf; - import java.io.IOException; import java.text.MessageFormat; @@ -59,8 +57,8 @@ abstract class AbstractFetchCommand extends TextBuiltin { shownURI = true; } - outw.format(" %c %-17s %-10s -> %s", valueOf(type), longType, //$NON-NLS-1$ - src, dst); + outw.format(" %c %-17s %-10s -> %s", Character.valueOf(type), //$NON-NLS-1$ + longType, src, dst); outw.println(); } } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Add.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Add.java index ff0b55d1b8..dc9d77df35 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Add.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Add.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010, Sasa Zivkov <sasa.zivkov@sap.com> and others + * Copyright (C) 2010, 2025 Sasa Zivkov <sasa.zivkov@sap.com> and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -16,6 +16,7 @@ import java.util.List; import org.eclipse.jgit.api.AddCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.pgm.internal.CLIText; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; @@ -28,18 +29,33 @@ class Add extends TextBuiltin { @Option(name = "--update", aliases = { "-u" }, usage = "usage_onlyMatchAgainstAlreadyTrackedFiles") private boolean update = false; - @Argument(required = true, metaVar = "metaVar_filepattern", usage = "usage_filesToAddContentFrom") + @Option(name = "--all", aliases = { "-A", + "--no-ignore-removal" }, usage = "usage_addStageDeletions") + private Boolean all; + + @Option(name = "--no-all", aliases = { + "--ignore-removal" }, usage = "usage_addDontStageDeletions") + private void noAll(@SuppressWarnings("unused") boolean ignored) { + all = Boolean.FALSE; + } + + @Argument(metaVar = "metaVar_filepattern", usage = "usage_filesToAddContentFrom") private List<String> filepatterns = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() throws Exception { try (Git git = new Git(db)) { - AddCommand addCmd = git.add(); if (renormalize) { update = true; } + if (update && all != null) { + throw die(CLIText.get().addIncompatibleOptions); + } + AddCommand addCmd = git.add(); addCmd.setUpdate(update).setRenormalize(renormalize); + if (all != null) { + addCmd.setAll(all.booleanValue()); + } for (String p : filepatterns) { addCmd.addFilepattern(p); } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AmazonS3Client.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AmazonS3Client.java index 0acad86f40..24a75a86e8 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AmazonS3Client.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AmazonS3Client.java @@ -11,8 +11,6 @@ package org.eclipse.jgit.pgm; -import static java.lang.Integer.valueOf; - import java.io.EOFException; import java.io.File; import java.io.FileInputStream; @@ -42,13 +40,11 @@ class AmazonS3Client extends TextBuiltin { @Argument(index = 3, metaVar = "metaVar_KEY", required = true) private String key; - /** {@inheritDoc} */ @Override protected final boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() throws Exception { final AmazonS3 s3 = new AmazonS3(properties()); @@ -68,7 +64,7 @@ class AmazonS3Client extends TextBuiltin { if (n < 0) throw new EOFException(MessageFormat.format( CLIText.get().expectedNumberOfbytes, - valueOf(len))); + Integer.valueOf(len))); outs.write(tmp, 0, n); len -= n; } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java index 4028105b87..f98f8cb728 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java @@ -41,7 +41,6 @@ class Archive extends TextBuiltin { @Option(name = "--output", aliases = { "-o" }, metaVar = "metaVar_file", usage = "usage_archiveOutput") private String output; - /** {@inheritDoc} */ @Override protected void run() throws Exception { if (tree == null) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java index 1a3a2f6f4b..285fe2a96a 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Blame.java @@ -13,14 +13,12 @@ package org.eclipse.jgit.pgm; -import static java.lang.Integer.valueOf; -import static java.lang.Long.valueOf; import static org.eclipse.jgit.lib.Constants.OBJECT_ID_ABBREV_STRING_LENGTH; import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH; import java.io.IOException; import java.text.MessageFormat; -import java.text.SimpleDateFormat; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -93,7 +91,7 @@ class Blame extends TextBuiltin { private final Map<RevCommit, String> abbreviatedCommits = new HashMap<>(); - private SimpleDateFormat dateFmt; + private DateTimeFormatter dateFmt; private int begin; @@ -104,7 +102,6 @@ class Blame extends TextBuiltin { /** Used to get a current time stamp for lines without commit. */ private final PersonIdent dummyDate = new PersonIdent("", ""); //$NON-NLS-1$ //$NON-NLS-2$ - /** {@inheritDoc} */ @Override protected void run() { if (file == null) { @@ -128,9 +125,9 @@ class Blame extends TextBuiltin { } if (showRawTimestamp) { - dateFmt = new SimpleDateFormat("ZZZZ"); //$NON-NLS-1$ + dateFmt = DateTimeFormatter.ofPattern("ZZ"); //$NON-NLS-1$ } else { - dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ZZZZ"); //$NON-NLS-1$ + dateFmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss ZZ"); //$NON-NLS-1$ } try (ObjectReader reader = db.newObjectReader(); @@ -198,13 +195,14 @@ class Blame extends TextBuiltin { maxSourceLine = Math.max(maxSourceLine, blame.getSourceLine(line)); } - String pathFmt = MessageFormat.format(" %{0}s", valueOf(pathWidth)); //$NON-NLS-1$ + String pathFmt = MessageFormat.format(" %{0}s", //$NON-NLS-1$ + Integer.valueOf(pathWidth)); String numFmt = MessageFormat.format(" %{0}d", //$NON-NLS-1$ - valueOf(1 + (int) Math.log10(maxSourceLine + 1))); + Integer.valueOf(1 + (int) Math.log10(maxSourceLine + 1))); String lineFmt = MessageFormat.format(" %{0}d) ", //$NON-NLS-1$ - valueOf(1 + (int) Math.log10(end + 1))); + Integer.valueOf(1 + (int) Math.log10(end + 1))); String authorFmt = MessageFormat.format(" (%-{0}s %{1}s", //$NON-NLS-1$ - valueOf(authorWidth), valueOf(dateWidth)); + Integer.valueOf(authorWidth), Integer.valueOf(dateWidth)); for (int line = begin; line < end;) { RevCommit c = blame.getSourceCommit(line); @@ -221,12 +219,13 @@ class Blame extends TextBuiltin { outw.format(pathFmt, path(line)); } if (showSourceLine) { - outw.format(numFmt, valueOf(blame.getSourceLine(line) + 1)); + outw.format(numFmt, + Integer.valueOf(blame.getSourceLine(line) + 1)); } if (!noAuthor) { outw.format(authorFmt, author, date); } - outw.format(lineFmt, valueOf(line + 1)); + outw.format(lineFmt, Integer.valueOf(line + 1)); outw.flush(); blame.getResultContents().writeLine(outs, line); outs.flush(); @@ -336,12 +335,14 @@ class Blame extends TextBuiltin { if (author == null) return ""; //$NON-NLS-1$ - dateFmt.setTimeZone(author.getTimeZone()); - if (!showRawTimestamp) - return dateFmt.format(author.getWhen()); + if (!showRawTimestamp) { + return dateFmt.withZone(author.getZoneId()) + .format(author.getWhenAsInstant()); + } return String.format("%d %s", //$NON-NLS-1$ - valueOf(author.getWhen().getTime() / 1000L), - dateFmt.format(author.getWhen())); + Long.valueOf(author.getWhenAsInstant().getEpochSecond()), + dateFmt.withZone(author.getZoneId()) + .format(author.getWhenAsInstant())); } private String abbreviate(ObjectReader reader, RevCommit commit) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Branch.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Branch.java index 27668b5378..e680394a79 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Branch.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Branch.java @@ -148,7 +148,6 @@ class Branch extends TextBuiltin { private int maxNameLength; - /** {@inheritDoc} */ @Override protected void run() { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java index 98724bfceb..7a218ec926 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Checkout.java @@ -18,6 +18,7 @@ import java.util.List; import org.eclipse.jgit.api.CheckoutCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.CheckoutConflictException; +import org.eclipse.jgit.api.errors.InvalidRefNameException; import org.eclipse.jgit.api.errors.RefAlreadyExistsException; import org.eclipse.jgit.api.errors.RefNotFoundException; import org.eclipse.jgit.lib.Constants; @@ -51,7 +52,6 @@ class Checkout extends TextBuiltin { @Option(name = "--", metaVar = "metaVar_paths", handler = RestOfArgumentsHandler.class) private List<String> paths = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() throws Exception { if (createBranch) { @@ -95,7 +95,16 @@ class Checkout extends TextBuiltin { outw.println(MessageFormat.format( CLIText.get().switchedToBranch, Repository.shortenRefName(ref.getName()))); - } catch (RefNotFoundException e) { + } catch (InvalidRefNameException e){ + if (name == null){ + throw die(MessageFormat + .format("a valid ref is expected",e)); + } else { + throw die(MessageFormat + .format(CLIText.get().notAValidRefName, name, e)); + } + } + catch (RefNotFoundException e) { throw die(MessageFormat .format(CLIText.get().pathspecDidNotMatch, name), e); } catch (RefAlreadyExistsException e) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clean.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clean.java index 6db73e632d..348f2e7dbb 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clean.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clean.java @@ -32,7 +32,6 @@ class Clean extends TextBuiltin { @Option(name = "--dryRun", aliases = { "-n" }) private boolean dryRun = false; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java index 9f9fa8fe99..1efba55f05 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java @@ -72,13 +72,11 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback { @Argument(index = 1, metaVar = "metaVar_directory") private String localName; - /** {@inheritDoc} */ @Override protected final boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() throws Exception { if (localName != null && gitdir != null) @@ -148,7 +146,6 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback { } } - /** {@inheritDoc} */ @Override public void initializedSubmodules(Collection<String> submodules) { try { @@ -162,7 +159,6 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback { } } - /** {@inheritDoc} */ @Override public void cloningSubmodule(String path) { try { @@ -174,7 +170,6 @@ class Clone extends AbstractFetchCommand implements CloneCommand.Callback { } } - /** {@inheritDoc} */ @Override public void checkingOut(AnyObjectId commit, String path) { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandCatalog.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandCatalog.java index 210e17277f..2a9f7acdb9 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandCatalog.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandCatalog.java @@ -19,10 +19,10 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; -import java.util.Vector; /** * List of all commands known by jgit's command line tools. @@ -104,7 +104,7 @@ public class CommandCatalog { final String pfx = "META-INF/services/"; //$NON-NLS-1$ return ldr.getResources(pfx + TextBuiltin.class.getName()); } catch (IOException err) { - return new Vector<URL>().elements(); + return Collections.emptyEnumeration(); } } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandRef.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandRef.java index 7a197a75a5..fb5a8fffc1 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandRef.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/CommandRef.java @@ -141,7 +141,6 @@ public class CommandRef { return r; } - /** {@inheritDoc} */ @SuppressWarnings("nls") @Override public String toString() { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java index b0713f782c..8df028d2e2 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Commit.java @@ -84,7 +84,6 @@ class Commit extends TextBuiltin { @Argument(metaVar = "metaVar_commitPaths", usage = "usage_CommitPaths") private List<String> paths = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Config.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Config.java index 979c6fa945..f5de7045d0 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Config.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Config.java @@ -68,7 +68,6 @@ class Config extends TextBuiltin { @Option(name = "--file", aliases = { "-f" }, metaVar = "metaVar_file", usage = "usage_configFile") private File configFile; - /** {@inheritDoc} */ @Override protected void run() { if (!list) { @@ -95,7 +94,7 @@ class Config extends TextBuiltin { if (global || isListAll()) list(SystemReader.getInstance().openUserConfig(null, fs)); if (local || isListAll()) - list(new FileBasedConfig(fs.resolve(getRepository().getDirectory(), + list(new FileBasedConfig(fs.resolve(getRepository().getCommonDirectory(), Constants.CONFIG), fs)); } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ConvertRefStorage.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ConvertRefStorage.java index 47e4b6ba79..06e37da841 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ConvertRefStorage.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ConvertRefStorage.java @@ -28,7 +28,6 @@ class ConvertRefStorage extends TextBuiltin { "-r" }, usage = "usage_convertRefStorageRefLogs") private boolean writeLogs = true; - /** {@inheritDoc} */ @Override protected void run() throws Exception { ((FileRepository) db).convertRefStorage(format, writeLogs, backup); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Daemon.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Daemon.java index f987f2c806..ec201a55ef 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Daemon.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Daemon.java @@ -64,13 +64,11 @@ class Daemon extends TextBuiltin { @Argument(required = true, metaVar = "metaVar_directory", usage = "usage_directoriesToExport") List<File> directory = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() throws Exception { PackConfig packConfig = new PackConfig(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Describe.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Describe.java index 116db037d4..2633336e12 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Describe.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Describe.java @@ -44,10 +44,12 @@ class Describe extends TextBuiltin { @Option(name = "--match", usage = "usage_Match", metaVar = "metaVar_pattern") private List<String> patterns = new ArrayList<>(); + @Option(name = "--exclude", usage = "usage_Exclude", metaVar = "metaVar_pattern") + private List<String> excludes = new ArrayList<>(); + @Option(name = "--abbrev", usage = "usage_Abbrev") private Integer abbrev; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { @@ -60,6 +62,7 @@ class Describe extends TextBuiltin { cmd.setTags(useTags); cmd.setAlways(always); cmd.setMatch(patterns.toArray(new String[0])); + cmd.setExclude(excludes.toArray(new String[0])); if (abbrev != null) { cmd.setAbbrev(abbrev.intValue()); } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java index 3152c44554..52665a1c71 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Diff.java @@ -12,7 +12,6 @@ package org.eclipse.jgit.pgm; -import static java.lang.Integer.valueOf; import static org.eclipse.jgit.lib.Constants.HEAD; import static org.eclipse.jgit.lib.Constants.OBJECT_ID_STRING_LENGTH; @@ -155,14 +154,12 @@ class Diff extends TextBuiltin { // END -- Options shared with Log - /** {@inheritDoc} */ @Override protected void init(Repository repository, String gitDir) { super.init(repository, gitDir); diffFmt = new DiffFormatter(new BufferedOutputStream(outs)); } - /** {@inheritDoc} */ @Override protected void run() { diffFmt.setRepository(db); @@ -230,13 +227,15 @@ class Diff extends TextBuiltin { out.println("M\t" + ent.getNewPath()); //$NON-NLS-1$ break; case COPY: - out.format("C%1$03d\t%2$s\t%3$s", valueOf(ent.getScore()), // //$NON-NLS-1$ - ent.getOldPath(), ent.getNewPath()); + out.format("C%1$03d\t%2$s\t%3$s", //$NON-NLS-1$ + Integer.valueOf(ent.getScore()), ent.getOldPath(), + ent.getNewPath()); out.println(); break; case RENAME: - out.format("R%1$03d\t%2$s\t%3$s", valueOf(ent.getScore()), // //$NON-NLS-1$ - ent.getOldPath(), ent.getNewPath()); + out.format("R%1$03d\t%2$s\t%3$s", //$NON-NLS-1$ + Integer.valueOf(ent.getScore()), ent.getOldPath(), + ent.getNewPath()); out.println(); break; } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/DiffTree.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/DiffTree.java index 9aaf3f5c5a..352ffde26c 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/DiffTree.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/DiffTree.java @@ -40,7 +40,6 @@ class DiffTree extends TextBuiltin { @Option(name = "--", metaVar = "metaVar_path", handler = PathTreeFilterHandler.class) private TreeFilter pathFilter = TreeFilter.ALL; - /** {@inheritDoc} */ @Override protected void run() { try (TreeWalk walk = new TreeWalk(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java index 2e0c36b287..7a007e3b58 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Fetch.java @@ -113,7 +113,6 @@ class Fetch extends AbstractFetchCommand implements FetchCommand.Callback { @Argument(index = 1, metaVar = "metaVar_refspec") private List<RefSpec> toget; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { @@ -167,7 +166,6 @@ class Fetch extends AbstractFetchCommand implements FetchCommand.Callback { } } - /** {@inheritDoc} */ @Override public void fetchingSubmodule(String name) { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java index c87f0b6dcf..35ac7a162a 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java @@ -27,6 +27,9 @@ class Gc extends TextBuiltin { @Option(name = "--prune-preserved", usage = "usage_PrunePreserved") private Boolean prunePreserved; + @Option(name = "--pack-kept-objects", usage = "usage_PackKeptObjects") + private Boolean packKeptObjects; + /** {@inheritDoc} */ @Override protected void run() { @@ -40,6 +43,9 @@ class Gc extends TextBuiltin { if (prunePreserved != null) { command.setPrunePreserved(prunePreserved.booleanValue()); } + if (packKeptObjects != null) { + command.setPackKeptObjects(packKeptObjects.booleanValue()); + } command.call(); } catch (GitAPIException e) { throw die(e.getMessage(), e); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Glog.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Glog.java index 5318018928..ce687c4639 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Glog.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Glog.java @@ -65,7 +65,6 @@ class Glog extends RevWalkTextBuiltin { frame.getContentPane().add(world); } - /** {@inheritDoc} */ @Override protected int walkLoop() throws Exception { graphPane.getCommitList().source(walk); @@ -77,13 +76,11 @@ class Glog extends RevWalkTextBuiltin { return graphPane.getCommitList().size(); } - /** {@inheritDoc} */ @Override protected void show(RevCommit c) throws Exception { throw new UnsupportedOperationException(); } - /** {@inheritDoc} */ @Override protected RevWalk createWalk() { if (objects) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/IndexPack.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/IndexPack.java index 9732335130..b3808d6fda 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/IndexPack.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/IndexPack.java @@ -28,7 +28,6 @@ class IndexPack extends TextBuiltin { @Option(name = "--index-version", usage = "usage_indexFileFormatToCreate") private int indexVersion = -1; - /** {@inheritDoc} */ @Override protected void run() { BufferedInputStream in = new BufferedInputStream(ins); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Init.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Init.java index 7a0d96d419..9c4af813a4 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Init.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Init.java @@ -40,13 +40,11 @@ class Init extends TextBuiltin { @Argument(index = 0, metaVar = "metaVar_directory") private String directory; - /** {@inheritDoc} */ @Override protected final boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() { InitCommand command = Git.init(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java index d693051738..958e566986 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java @@ -32,13 +32,12 @@ import org.eclipse.jgit.errors.LargeObjectException; import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.GpgConfig; -import org.eclipse.jgit.lib.GpgSignatureVerifier; -import org.eclipse.jgit.lib.GpgSignatureVerifier.SignatureVerification; -import org.eclipse.jgit.lib.GpgSignatureVerifierFactory; +import org.eclipse.jgit.lib.SignatureVerifier.SignatureVerification; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.SignatureVerifiers; import org.eclipse.jgit.notes.NoteMap; import org.eclipse.jgit.pgm.internal.CLIText; import org.eclipse.jgit.pgm.internal.VerificationUtils; @@ -174,22 +173,18 @@ class Log extends RevWalkTextBuiltin { // END -- Options shared with Diff - private GpgSignatureVerifier verifier; - private GpgConfig config; Log() { dateFormatter = new GitDateFormatter(Format.DEFAULT); } - /** {@inheritDoc} */ @Override protected void init(Repository repository, String gitDir) { super.init(repository, gitDir); diffFmt = new DiffFormatter(new BufferedOutputStream(outs)); } - /** {@inheritDoc} */ @Override protected void run() { config = new GpgConfig(db.getConfig()); @@ -229,9 +224,6 @@ class Log extends RevWalkTextBuiltin { throw die(e.getMessage(), e); } finally { diffFmt.close(); - if (verifier != null) { - verifier.clear(); - } } } @@ -244,7 +236,6 @@ class Log extends RevWalkTextBuiltin { NoteMap.read(argWalk.getObjectReader(), notesCommit)); } - /** {@inheritDoc} */ @Override protected void show(RevCommit c) throws Exception { outw.print(CLIText.get().commitLabel); @@ -296,28 +287,24 @@ class Log extends RevWalkTextBuiltin { if (c.getRawGpgSignature() == null) { return; } - if (verifier == null) { - GpgSignatureVerifierFactory factory = GpgSignatureVerifierFactory - .getDefault(); - if (factory == null) { - throw die(CLIText.get().logNoSignatureVerifier, null); - } - verifier = factory.getVerifier(); - } - SignatureVerification verification = verifier.verifySignature(c, - config); + SignatureVerification verification = SignatureVerifiers.verify(db, + config, c); if (verification == null) { return; } VerificationUtils.writeVerification(outw, verification, - verifier.getName(), c.getCommitterIdent()); + verification.verifierName(), c.getCommitterIdent()); } /** + * Show notes for given commit + * * @param c + * given commit * @return <code>true</code> if at least one note was printed, * <code>false</code> otherwise * @throws IOException + * if an IO error occurred */ private boolean showNotes(RevCommit c) throws IOException { if (noteMaps == null) @@ -344,12 +331,17 @@ class Log extends RevWalkTextBuiltin { /** * @param c + * given commit * @param map + * note map * @param label + * label * @param emptyLine + * whether to start with an empty line * @return <code>true</code> if note was printed, <code>false</code> * otherwise * @throws IOException + * if an IO error occurred */ private boolean showNotes(RevCommit c, NoteMap map, String label, boolean emptyLine) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsRemote.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsRemote.java index 83446ccd53..89ceed256d 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsRemote.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsRemote.java @@ -40,7 +40,6 @@ class LsRemote extends TextBuiltin { @Argument(index = 0, metaVar = "metaVar_uriish", required = true) private String remote; - /** {@inheritDoc} */ @Override protected void run() { LsRemoteCommand command = Git.lsRemoteRepository().setRemote(remote) @@ -63,7 +62,6 @@ class LsRemote extends TextBuiltin { } } - /** {@inheritDoc} */ @Override protected boolean requiresRepository() { return false; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsTree.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsTree.java index bb140018bd..34b48c1b1a 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsTree.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/LsTree.java @@ -38,7 +38,6 @@ class LsTree extends TextBuiltin { @Option(name = "--", metaVar = "metaVar_paths", handler = StopOptionHandler.class) private List<String> paths = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() { try (TreeWalk walk = new TreeWalk(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java index 613fc5ff32..8df9bad740 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java @@ -97,6 +97,7 @@ public class Main { * @param argv * arguments. * @throws java.lang.Exception + * if an error occurred */ public static void main(String[] argv) throws Exception { // make sure built-in filters are registered @@ -121,6 +122,7 @@ public class Main { * @param argv * arguments. * @throws java.lang.Exception + * if an error occurred */ protected void run(String[] argv) throws Exception { writer = createErrorWriter(); @@ -263,9 +265,11 @@ public class Main { /** * @param status + * exit status code, nonzero value indicates an error * @param t * can be {@code null} * @throws Exception + * if an IO error occurred */ void exit(int status, Exception t) throws Exception { writer.flush(); @@ -351,8 +355,7 @@ public class Main { continue; } - final URL u = new URL( - (!s.contains("://")) ? protocol + "://" + s : s); //$NON-NLS-1$ //$NON-NLS-2$ + URL u = new URL(!s.contains("://") ? protocol + "://" + s : s); //$NON-NLS-1$ //$NON-NLS-2$ if (!u.getProtocol().startsWith("http")) //$NON-NLS-1$ throw new MalformedURLException(MessageFormat.format( CLIText.get().invalidHttpProxyOnlyHttpSupported, s)); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java index 27a3d90fad..b78998dd74 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java @@ -86,7 +86,6 @@ class Merge extends TextBuiltin { } } - /** {@inheritDoc} */ @Override protected void run() { if (squash && ff == FastForwardMode.NO_FF) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeBase.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeBase.java index 68eeff748d..a29c4d9f36 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeBase.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeBase.java @@ -26,14 +26,8 @@ class MergeBase extends TextBuiltin { private boolean all; @Argument(index = 0, metaVar = "metaVar_commitish", required = true) - void commit_0(final RevCommit c) { - commits.add(c); - } - - @Argument(index = 1, metaVar = "metaVar_commitish", required = true) private List<RevCommit> commits = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeTool.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeTool.java index a382fab757..9d0b65c479 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeTool.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MergeTool.java @@ -41,7 +41,6 @@ import org.eclipse.jgit.errors.NoWorkTreeException; import org.eclipse.jgit.errors.RevisionSyntaxException; import org.eclipse.jgit.internal.diffmergetool.ExternalMergeTool; import org.eclipse.jgit.internal.diffmergetool.FileElement; -import org.eclipse.jgit.internal.diffmergetool.FileElement.Type; import org.eclipse.jgit.internal.diffmergetool.MergeTools; import org.eclipse.jgit.internal.diffmergetool.ToolException; import org.eclipse.jgit.lib.Constants; @@ -218,8 +217,8 @@ class MergeTool extends TextBuiltin { FileElement base = null; FileElement local = null; FileElement remote = null; - FileElement merged = new FileElement(mergedFilePath, Type.MERGED, - db.getWorkTree()); + FileElement merged = new FileElement(mergedFilePath, + FileElement.Type.MERGED, db.getWorkTree()); DirCache cache = db.readDirCache(); try (RevWalk revWalk = new RevWalk(db); TreeWalk treeWalk = new TreeWalk(db, @@ -249,7 +248,8 @@ class MergeTool extends TextBuiltin { ObjectId id = entry.getObjectId(); switch (entry.getStage()) { case DirCacheEntry.STAGE_1: - base = new FileElement(mergedFilePath, Type.BASE); + base = new FileElement(mergedFilePath, + FileElement.Type.BASE); DirCacheCheckout.getContent(db, mergedFilePath, checkoutMetadata, baseSource.open(mergedFilePath, id), opt, @@ -257,7 +257,8 @@ class MergeTool extends TextBuiltin { base.createTempFile(tempFilesParent))); break; case DirCacheEntry.STAGE_2: - local = new FileElement(mergedFilePath, Type.LOCAL); + local = new FileElement(mergedFilePath, + FileElement.Type.LOCAL); DirCacheCheckout.getContent(db, mergedFilePath, checkoutMetadata, localSource.open(mergedFilePath, id), opt, @@ -265,7 +266,8 @@ class MergeTool extends TextBuiltin { local.createTempFile(tempFilesParent))); break; case DirCacheEntry.STAGE_3: - remote = new FileElement(mergedFilePath, Type.REMOTE); + remote = new FileElement(mergedFilePath, + FileElement.Type.REMOTE); DirCacheCheckout.getContent(db, mergedFilePath, checkoutMetadata, remoteSource.open(mergedFilePath, id), opt, diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MultiPackIndex.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MultiPackIndex.java new file mode 100644 index 0000000000..1844223cc9 --- /dev/null +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/MultiPackIndex.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2025, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.pgm; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jgit.internal.storage.file.ObjectDirectory; +import org.eclipse.jgit.internal.storage.file.Pack; +import org.eclipse.jgit.internal.storage.file.PackFile; +import org.eclipse.jgit.internal.storage.file.PackIndex; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndexPrettyPrinter; +import org.eclipse.jgit.internal.storage.midx.MultiPackIndexWriter; +import org.eclipse.jgit.internal.storage.pack.PackExt; +import org.eclipse.jgit.lib.NullProgressMonitor; +import org.kohsuke.args4j.Argument; +import org.kohsuke.args4j.Option; + +@Command(common = true, usage = "usage_MultiPackIndex") +@SuppressWarnings("nls") +class MultiPackIndex extends TextBuiltin { + @Argument(index = 0, required = true, usage = "write, print") + private String command; + + @Option(name = "--midx") + private String midxPath; + + /** {@inheritDoc} */ + @Override + protected void run() throws IOException { + switch (command) { + case "print": + printMultiPackIndex(); + break; + case "write": + writeMultiPackIndex(); + break; + default: + outw.println("Unknown command " + command); + } + } + + private void printMultiPackIndex() { + if (midxPath == null || midxPath.isEmpty()) { + throw die("'print' requires the path of a multipack " + + "index file with --midx option."); + } + + try (FileInputStream is = new FileInputStream(midxPath)) { + PrintWriter pw = new PrintWriter(outw, true); + MultiPackIndexPrettyPrinter.prettyPrint(is.readAllBytes(), pw); + } catch (FileNotFoundException e) { + throw die(true, e); + } catch (IOException e) { + throw die(true, e); + } + } + + private void writeMultiPackIndex() throws IOException { + if (!(db.getObjectDatabase() instanceof ObjectDirectory)) { + throw die("This repository object db doesn't have packs"); + } + + File midx; + if (midxPath == null || midxPath.isEmpty()) { + midx = new File(((ObjectDirectory) db.getObjectDatabase()) + .getPackDirectory(), "multi-pack-index"); + } else { + midx = new File(midxPath); + } + + errw.println("Writing " + midx.getAbsolutePath()); + + ObjectDirectory odb = (ObjectDirectory) db.getObjectDatabase(); + + Map<String, PackIndex> indexes = new HashMap<>(); + for (Pack pack : odb.getPacks()) { + PackFile packFile = pack.getPackFile().create(PackExt.INDEX); + try { + indexes.put(packFile.getName(), pack.getIndex()); + } catch (IOException e) { + throw die("Cannot open index in pack", e); + } + } + + MultiPackIndexWriter writer = new MultiPackIndexWriter(); + try (FileOutputStream out = new FileOutputStream(midxPath)) { + writer.write(NullProgressMonitor.INSTANCE, out, indexes); + } catch (IOException e) { + throw die("Cannot write midx " + midxPath, e); + } + } +} diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ObjectSizeIndex.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ObjectSizeIndex.java new file mode 100644 index 0000000000..a40c3964fb --- /dev/null +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ObjectSizeIndex.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2025, Google LLC. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.pgm; + +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_MIN_BYTES_OBJ_SIZE_INDEX; +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_USE_OBJECT_SIZE_INDEX; +import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION; + +import java.io.IOException; + +import org.eclipse.jgit.internal.storage.file.ObjectDirectory; +import org.eclipse.jgit.internal.storage.file.Pack; +import org.eclipse.jgit.internal.storage.file.PackObjectSizeIndexHelper; +import org.eclipse.jgit.lib.TextProgressMonitor; +import org.kohsuke.args4j.Argument; + +@Command(common = true, usage = "usage_ObjectSizeIndex") +@SuppressWarnings("nls") +class ObjectSizeIndex extends TextBuiltin { + @Argument(index = 0, required = true, usage = "write, check") + private String command; + + @Override + protected void run() throws IOException { + switch (command) { + case "write": + writeObjectSizeIndex(); + break; + case "check": + checkObjectSizeIndex(); + break; + default: + outw.println("Unknown command " + command); + } + } + + private void writeObjectSizeIndex() throws IOException { + if (!(db.getObjectDatabase() instanceof ObjectDirectory)) { + throw die("This repository object db doesn't have packs"); + } + PackObjectSizeIndexHelper.forAllPacks( + (ObjectDirectory) db.getObjectDatabase(), + new TextProgressMonitor()); + } + + private void checkObjectSizeIndex() throws IOException { + if (!(db.getObjectDatabase() instanceof ObjectDirectory)) { + throw die("This repository object db doesn't have packs"); + } + + outw.println("Object size index configuration for this repo:"); + outw.println("\n* Writing:"); + printInt(CONFIG_PACK_SECTION, CONFIG_KEY_MIN_BYTES_OBJ_SIZE_INDEX); + + outw.println("\n* Reading:"); + printBoolean(CONFIG_PACK_SECTION, CONFIG_KEY_USE_OBJECT_SIZE_INDEX); + + outw.println("\n* Packs - have object size index:"); + for (Pack pack : ((ObjectDirectory) db.getObjectDatabase()) + .getPacks()) { + String name = pack.getPackName(); + boolean hasObjectSizeIndex = pack.hasObjectSizeIndex(); + outw.println( + String.format(" - %s - %b", name, hasObjectSizeIndex)); + } + } + + private void printInt(String section, String name) throws IOException { + Integer value = db.getConfig().getInt(section, name); + String key = String.join(".", section, name); + outw.println(" - " + key + " = " + value); + } + + private void printBoolean(String section, String name) throws IOException { + Boolean value = db.getConfig().getBoolean(section, name); + String key = String.join(".", section, name); + outw.println(" - " + key + " = " + value); + } +} diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/PackRefs.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/PackRefs.java new file mode 100644 index 0000000000..ee05f5ca0b --- /dev/null +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/PackRefs.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 Qualcomm Innovation Center, Inc. + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.pgm; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.lib.TextProgressMonitor; +import org.kohsuke.args4j.Option; + +@Command(common = true, usage = "usage_PackRefs") +class PackRefs extends TextBuiltin { + @Option(name = "--all", usage = "usage_All") + private boolean all; + + @Override + protected void run() { + Git git = Git.wrap(db); + try { + git.packRefs().setProgressMonitor(new TextProgressMonitor(errw)) + .setAll(all).call(); + } catch (GitAPIException e) { + throw die(e.getMessage(), e); + } + } +} diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java index f2e3a16008..b1a5daaa65 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java @@ -11,8 +11,6 @@ package org.eclipse.jgit.pgm; -import static java.lang.Character.valueOf; - import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; @@ -81,7 +79,6 @@ class Push extends TextBuiltin { private boolean shownURI; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { @@ -234,7 +231,7 @@ class Push extends TextBuiltin { private void printUpdateLine(final char flag, final String summary, final String srcRef, final String destRef, final String message) throws IOException { - outw.format(" %c %-17s", valueOf(flag), summary); //$NON-NLS-1$ + outw.format(" %c %-17s", Character.valueOf(flag), summary); //$NON-NLS-1$ if (srcRef != null) outw.format(" %s ->", abbreviateRef(srcRef, true)); //$NON-NLS-1$ diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ReceivePack.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ReceivePack.java index f570f7f99b..f89a4d12be 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ReceivePack.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ReceivePack.java @@ -26,13 +26,11 @@ class ReceivePack extends TextBuiltin { @Argument(index = 0, required = true, metaVar = "metaVar_directory", usage = "usage_RepositoryToReceiveInto") File dstGitdir; - /** {@inheritDoc} */ @Override protected final boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() { final org.eclipse.jgit.transport.ReceivePack rp; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reflog.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reflog.java index c63532df60..46485cc5ef 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reflog.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reflog.java @@ -28,7 +28,6 @@ class Reflog extends TextBuiltin { @Argument(metaVar = "metaVar_ref") private String ref; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Remote.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Remote.java index 6d6feed7b8..a3100ac8ed 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Remote.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Remote.java @@ -52,7 +52,6 @@ class Remote extends TextBuiltin { @Argument(index = 2, metaVar = "metaVar_uriish") private String uri; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { @@ -114,7 +113,6 @@ class Remote extends TextBuiltin { } } - /** {@inheritDoc} */ @Override public void printUsage(String message, CmdLineParser clp) throws IOException { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Repo.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Repo.java index 0588a7cdbe..da622e1130 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Repo.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Repo.java @@ -26,7 +26,6 @@ class Repo extends TextBuiltin { @Argument(required = true, metaVar = "metaVar_path", usage = "usage_pathToXml") private String path; - /** {@inheritDoc} */ @Override protected void run() { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reset.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reset.java index 3454cf2515..f33cb6be71 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reset.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Reset.java @@ -41,7 +41,6 @@ class Reset extends TextBuiltin { @Option(name = "--", metaVar = "metaVar_paths", handler = RestOfArgumentsHandler.class) private List<String> paths = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevList.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevList.java index e86ad01823..59fc5f296c 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevList.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevList.java @@ -18,7 +18,6 @@ import org.eclipse.jgit.revwalk.RevTree; @Command(usage = "usage_RevList") class RevList extends RevWalkTextBuiltin { - /** {@inheritDoc} */ @Override protected void show(RevCommit c) throws Exception { if (c.has(RevFlag.UNINTERESTING)) @@ -32,7 +31,6 @@ class RevList extends RevWalkTextBuiltin { outw.println(); } - /** {@inheritDoc} */ @Override protected void show(ObjectWalk ow, RevObject obj) throws Exception { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevParse.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevParse.java index 9e4d1c9dd5..b1fb07b5b8 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevParse.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevParse.java @@ -35,7 +35,6 @@ class RevParse extends TextBuiltin { @Argument(index = 0, metaVar = "metaVar_commitish") private List<ObjectId> commits = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java index 696a924ecf..51e597c57a 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/RevWalkTextBuiltin.java @@ -114,7 +114,6 @@ abstract class RevWalkTextBuiltin extends TextBuiltin { @Option(name = "--max-count", aliases = "-n", metaVar = "metaVar_n") private int maxCount = -1; - /** {@inheritDoc} */ @Override protected void run() throws Exception { walk = createWalk(); @@ -228,7 +227,8 @@ abstract class RevWalkTextBuiltin extends TextBuiltin { * * @param c * The current {@link org.eclipse.jgit.revwalk.RevCommit} - * @throws java.lang.Exception + * @throws Exception + * if an error occurred */ protected abstract void show(RevCommit c) throws Exception; @@ -243,7 +243,8 @@ abstract class RevWalkTextBuiltin extends TextBuiltin { * {@link #walkLoop()} * @param currentObject * The current {@link org.eclipse.jgit.revwalk.RevObject} - * @throws java.lang.Exception + * @throws Exception + * if an error occurred */ protected void show(final ObjectWalk objectWalk, final RevObject currentObject) throws Exception { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Rm.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Rm.java index 4a337983eb..234da1a1c5 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Rm.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Rm.java @@ -27,7 +27,6 @@ class Rm extends TextBuiltin { @Option(name = "--", handler = StopOptionHandler.class) private List<String> paths = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java index c18d35a205..a3a6782a71 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Show.java @@ -14,11 +14,10 @@ package org.eclipse.jgit.pgm; import java.io.BufferedOutputStream; import java.io.IOException; -import java.text.DateFormat; import java.text.MessageFormat; -import java.text.SimpleDateFormat; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Locale; -import java.util.TimeZone; import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.diff.RawTextComparator; @@ -30,12 +29,11 @@ import org.eclipse.jgit.errors.RevisionSyntaxException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.GpgConfig; -import org.eclipse.jgit.lib.GpgSignatureVerifier; -import org.eclipse.jgit.lib.GpgSignatureVerifierFactory; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.lib.GpgSignatureVerifier.SignatureVerification; +import org.eclipse.jgit.lib.SignatureVerifier.SignatureVerification; +import org.eclipse.jgit.lib.SignatureVerifiers; import org.eclipse.jgit.pgm.internal.CLIText; import org.eclipse.jgit.pgm.internal.VerificationUtils; import org.eclipse.jgit.pgm.opt.PathTreeFilterHandler; @@ -52,9 +50,9 @@ import org.kohsuke.args4j.Option; @Command(common = true, usage = "usage_show") class Show extends TextBuiltin { - private final TimeZone myTZ = TimeZone.getDefault(); + private final ZoneId myTZ = ZoneId.systemDefault(); - private final DateFormat fmt; + private final DateTimeFormatter fmt; private DiffFormatter diffFmt; @@ -158,17 +156,16 @@ class Show extends TextBuiltin { // END -- Options shared with Diff Show() { - fmt = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy ZZZZZ", Locale.US); //$NON-NLS-1$ + fmt = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss yyyy ZZ", //$NON-NLS-1$ + Locale.US); } - /** {@inheritDoc} */ @Override protected void init(Repository repository, String gitDir) { super.init(repository, gitDir); diffFmt = new DiffFormatter(new BufferedOutputStream(outs)); } - /** {@inheritDoc} */ @SuppressWarnings("boxing") @Override protected void run() { @@ -235,15 +232,17 @@ class Show extends TextBuiltin { outw.print(tag.getTagName()); outw.println(); - final PersonIdent tagger = tag.getTaggerIdent(); + PersonIdent tagger = tag.getTaggerIdent(); if (tagger != null) { outw.println(MessageFormat.format(CLIText.get().taggerInfo, tagger.getName(), tagger.getEmailAddress())); - final TimeZone taggerTZ = tagger.getTimeZone(); - fmt.setTimeZone(taggerTZ != null ? taggerTZ : myTZ); + ZoneId taggerTZ = tagger.getZoneId(); + String formattedTaggerTime = fmt + .withZone(taggerTZ != null ? taggerTZ : myTZ) + .format(tagger.getWhenAsInstant()); outw.println(MessageFormat.format(CLIText.get().dateInfo, - fmt.format(tagger.getWhen()))); + formattedTaggerTime)); } outw.println(); @@ -296,10 +295,12 @@ class Show extends TextBuiltin { outw.println(MessageFormat.format(CLIText.get().authorInfo, author.getName(), author.getEmailAddress())); - final TimeZone authorTZ = author.getTimeZone(); - fmt.setTimeZone(authorTZ != null ? authorTZ : myTZ); + final ZoneId authorTZ = author.getZoneId(); + String formattedAuthorTime = fmt + .withZone(authorTZ != null ? authorTZ : myTZ) + .format(author.getWhenAsInstant()); outw.println(MessageFormat.format(CLIText.get().dateInfo, - fmt.format(author.getWhen()))); + formattedAuthorTime)); outw.println(); final String[] lines = c.getFullMessage().split("\n"); //$NON-NLS-1$ @@ -337,23 +338,13 @@ class Show extends TextBuiltin { if (c.getRawGpgSignature() == null) { return; } - GpgSignatureVerifierFactory factory = GpgSignatureVerifierFactory - .getDefault(); - if (factory == null) { - throw die(CLIText.get().logNoSignatureVerifier, null); - } - GpgSignatureVerifier verifier = factory.getVerifier(); GpgConfig config = new GpgConfig(db.getConfig()); - try { - SignatureVerification verification = verifier.verifySignature(c, - config); - if (verification == null) { - return; - } - VerificationUtils.writeVerification(outw, verification, - verifier.getName(), c.getCommitterIdent()); - } finally { - verifier.clear(); + SignatureVerification verification = SignatureVerifiers.verify(db, + config, c); + if (verification == null) { + throw die(CLIText.get().logNoSignatureVerifier, null); } + VerificationUtils.writeVerification(outw, verification, + verification.verifierName(), c.getCommitterIdent()); } } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ShowRef.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ShowRef.java index a58785fef3..64b182e17d 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ShowRef.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ShowRef.java @@ -21,7 +21,6 @@ import org.eclipse.jgit.lib.RefComparator; @Command(usage = "usage_ShowRef") class ShowRef extends TextBuiltin { - /** {@inheritDoc} */ @Override protected void run() { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java index 141de0cd5d..c96e475613 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java @@ -55,7 +55,6 @@ class Status extends TextBuiltin { @Option(name = "--", metaVar = "metaVar_paths", handler = RestOfArgumentsHandler.class) protected List<String> filterPaths; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { @@ -227,7 +226,7 @@ class Status extends TextBuiltin { firstHeader = false; } int nbUntracked = untracked.size(); - if (nbUntracked > 0 && ("all".equals(untrackedFilesMode))) { //$NON-NLS-1$ + if (nbUntracked > 0 && "all".equals(untrackedFilesMode)) { //$NON-NLS-1$ if (!firstHeader) printSectionHeader(""); //$NON-NLS-1$ printSectionHeader(CLIText.get().untrackedFiles); @@ -239,10 +238,11 @@ class Status extends TextBuiltin { * Print section header * * @param pattern - * a {@link java.lang.String} object. + * a {@link String} object. * @param arguments - * a {@link java.lang.Object} object. - * @throws java.io.IOException + * a {@link Object} object. + * @throws IOException + * if an IO error occurred */ protected void printSectionHeader(String pattern, Object... arguments) throws IOException { @@ -259,9 +259,10 @@ class Status extends TextBuiltin { * Print String list * * @param list - * a {@link java.util.Collection} object. - * @return a int. - * @throws java.io.IOException + * a {@link Collection} object. + * @return size of the list + * @throws IOException + * if an IO error occurred */ protected int printList(Collection<String> list) throws IOException { if (!list.isEmpty()) { @@ -281,21 +282,22 @@ class Status extends TextBuiltin { * Print String list * * @param status1 - * a {@link java.lang.String} object. + * a {@link String} object. * @param status2 - * a {@link java.lang.String} object. + * a {@link String} object. * @param status3 - * a {@link java.lang.String} object. + * a {@link String} object. * @param list - * a {@link java.util.Collection} object. + * a {@link Collection} object. * @param set1 - * a {@link java.util.Collection} object. + * a {@link Collection} object. * @param set2 - * a {@link java.util.Collection} object. + * a {@link Collection} object. * @param set3 - * a {@link java.util.Collection} object. + * a {@link Collection} object. * @return a int. - * @throws java.io.IOException + * @throws IOException + * if an IO error occurred */ protected int printList(String status1, String status2, String status3, Collection<String> list, Collection<String> set1, diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java index 0603de18ac..6be30c9447 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java @@ -27,10 +27,10 @@ import org.eclipse.jgit.api.VerifySignatureCommand; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.RefAlreadyExistsException; import org.eclipse.jgit.lib.Constants; -import org.eclipse.jgit.lib.GpgSignatureVerifier.SignatureVerification; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.lib.SignatureVerifier.SignatureVerification; import org.eclipse.jgit.pgm.internal.CLIText; import org.eclipse.jgit.pgm.internal.VerificationUtils; import org.eclipse.jgit.revwalk.RevCommit; @@ -88,7 +88,6 @@ class Tag extends TextBuiltin { @Argument(index = 1, metaVar = "metaVar_object") private ObjectId object; - /** {@inheritDoc} */ @Override protected void run() { try (Git git = new Git(db)) { @@ -107,7 +106,8 @@ class Tag extends TextBuiltin { if (error != null) { throw die(error.getMessage(), error); } - writeVerification(verifySig.getVerifier().getName(), + writeVerification( + verification.getVerification().verifierName(), (RevTag) verification.getObject(), verification.getVerification()); } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java index 6cfe93d850..c572e3bc7d 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java @@ -249,6 +249,7 @@ public abstract class TextBuiltin { * @param args * the arguments supplied on the command line, if any. * @throws java.io.IOException + * if an IO error occurred */ protected void parseArguments(String[] args) throws IOException { final CmdLineParser clp = new CmdLineParser(this); @@ -277,6 +278,7 @@ public abstract class TextBuiltin { * @param clp * a {@link org.eclipse.jgit.pgm.opt.CmdLineParser} object. * @throws java.io.IOException + * if an IO error occurred */ public void printUsageAndExit(CmdLineParser clp) throws IOException { printUsageAndExit("", clp); //$NON-NLS-1$ @@ -290,6 +292,7 @@ public abstract class TextBuiltin { * @param clp * a {@link org.eclipse.jgit.pgm.opt.CmdLineParser} object. * @throws java.io.IOException + * if an IO error occurred */ public void printUsageAndExit(String message, CmdLineParser clp) throws IOException { printUsage(message, clp); @@ -304,6 +307,7 @@ public abstract class TextBuiltin { * @param clp * parser used to print options * @throws java.io.IOException + * if an IO error occurred * @since 4.2 */ protected void printUsage(String message, CmdLineParser clp) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java index ac51643b6e..db2c393b9a 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/UploadPack.java @@ -30,13 +30,11 @@ class UploadPack extends TextBuiltin { @Argument(index = 0, required = true, metaVar = "metaVar_directory", usage = "usage_RepositoryToReadFrom") File srcGitdir; - /** {@inheritDoc} */ @Override protected final boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() { try { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Version.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Version.java index d06f1e2fbf..8546094ac2 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Version.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Version.java @@ -22,7 +22,6 @@ import org.eclipse.jgit.pgm.internal.CLIText; @Command(common = true, usage = "usage_DisplayTheVersionOfJgit") class Version extends TextBuiltin { - /** {@inheritDoc} */ @Override protected void run() { // read the Implementation-Version from Manifest @@ -48,7 +47,6 @@ class Version extends TextBuiltin { } } - /** {@inheritDoc} */ @Override protected final boolean requiresRepository() { return false; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/BenchmarkReftable.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/BenchmarkReftable.java index f23f4cf0ea..b7a7ec2feb 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/BenchmarkReftable.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/BenchmarkReftable.java @@ -70,7 +70,6 @@ class BenchmarkReftable extends TextBuiltin { @Argument(index = 1) private String reftablePath; - /** {@inheritDoc} */ @Override protected void run() throws Exception { switch (test) { @@ -108,13 +107,12 @@ class BenchmarkReftable extends TextBuiltin { @SuppressWarnings({ "nls", "boxing" }) private void writeStack() throws Exception { File dir = new File(reftablePath); - File stackFile = new File(reftablePath + ".stack"); dir.mkdirs(); long start = System.currentTimeMillis(); - try (FileReftableStack stack = new FileReftableStack(stackFile, dir, - null, () -> new Config())) { + try (FileReftableStack stack = new FileReftableStack(dir, null, + () -> new Config())) { List<Ref> refs = readLsRemote().asList(); for (Ref r : refs) { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/DiffAlgorithms.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/DiffAlgorithms.java index a63387c24c..2bdca24336 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/DiffAlgorithms.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/DiffAlgorithms.java @@ -10,9 +10,6 @@ package org.eclipse.jgit.pgm.debug; -import static java.lang.Integer.valueOf; -import static java.lang.Long.valueOf; - import java.io.File; import java.lang.management.ManagementFactory; import java.lang.management.ThreadMXBean; @@ -96,13 +93,11 @@ class DiffAlgorithms extends TextBuiltin { private ThreadMXBean mxBean; - /** {@inheritDoc} */ @Override protected boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() throws Exception { mxBean = ManagementFactory.getThreadMXBean(); @@ -218,10 +213,10 @@ class DiffAlgorithms extends TextBuiltin { outw.println(name + ": start at " + startId.name()); //$NON-NLS-1$ } - outw.format(" %12d files, %8d commits\n", valueOf(files), //$NON-NLS-1$ - valueOf(commits)); - outw.format(" N=%10d min lines, %8d max lines\n", valueOf(minN), //$NON-NLS-1$ - valueOf(maxN)); + outw.format(" %12d files, %8d commits\n", Long.valueOf(files), //$NON-NLS-1$ + Integer.valueOf(commits)); + outw.format(" N=%10d min lines, %8d max lines\n", //$NON-NLS-1$ + Integer.valueOf(minN), Integer.valueOf(maxN)); outw.format("%-25s %12s ( %12s %12s )\n", //$NON-NLS-1$ "Algorithm", "Time(ns)", "Time(ns) on", "Time(ns) on"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ @@ -233,9 +228,9 @@ class DiffAlgorithms extends TextBuiltin { for (Test test : all) { outw.format("%-25s %12d ( %12d %12d )", // //$NON-NLS-1$ test.algorithm.name, // - valueOf(test.runningTimeNanos), // - valueOf(test.minN.runningTimeNanos), // - valueOf(test.maxN.runningTimeNanos)); + Long.valueOf(test.runningTimeNanos), // + Long.valueOf(test.minN.runningTimeNanos), // + Long.valueOf(test.maxN.runningTimeNanos)); outw.println(); } outw.println(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/LfsStore.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/LfsStore.java index 9c0ced5c1e..757c435722 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/LfsStore.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/LfsStore.java @@ -26,8 +26,8 @@ import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.ee10.servlet.ServletContextHandler; +import org.eclipse.jetty.ee10.servlet.ServletHolder; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lfs.server.LargeFileRepository; import org.eclipse.jgit.lfs.server.LfsProtocolServlet; @@ -181,13 +181,11 @@ class LfsStore extends TextBuiltin { String secretKey; - /** {@inheritDoc} */ @Override protected boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() throws Exception { AppServer server = new AppServer(port); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/MakeCacheTree.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/MakeCacheTree.java index 63897a3891..eec10c774f 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/MakeCacheTree.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/MakeCacheTree.java @@ -11,8 +11,6 @@ package org.eclipse.jgit.pgm.debug; -import static java.lang.Integer.valueOf; - import java.io.IOException; import java.text.MessageFormat; @@ -24,7 +22,6 @@ import org.eclipse.jgit.pgm.internal.CLIText; @Command(usage = "usage_MakeCacheTree") class MakeCacheTree extends TextBuiltin { - /** {@inheritDoc} */ @Override protected void run() throws Exception { final DirCache cache = db.readDirCache(); @@ -34,8 +31,8 @@ class MakeCacheTree extends TextBuiltin { private void show(DirCacheTree tree) throws IOException { outw.println(MessageFormat.format(CLIText.get().cacheTreePathInfo, - tree.getPathString(), valueOf(tree.getEntrySpan()), - valueOf(tree.getChildCount()))); + tree.getPathString(), Integer.valueOf(tree.getEntrySpan()), + Integer.valueOf(tree.getChildCount()))); for (int i = 0; i < tree.getChildCount(); i++) show(tree.getChild(i)); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadChangedPathFilter.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadChangedPathFilter.java new file mode 100644 index 0000000000..1414165e54 --- /dev/null +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadChangedPathFilter.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2023, Google LLC + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Distribution License v. 1.0 which is available at + * https://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +package org.eclipse.jgit.pgm.debug; + +import java.io.FileInputStream; +import java.util.HashSet; + +import org.eclipse.jgit.pgm.Command; +import org.eclipse.jgit.pgm.TextBuiltin; +import org.eclipse.jgit.util.NB; +import org.kohsuke.args4j.Argument; + +/** + * Prints the contents of the BDAT chunk from commit-graph file. + * <p> + * This is a debugging tool for changed path filter development. + */ +@Command +class ReadChangedPathFilter extends TextBuiltin { + + static final int CHUNK_ID_OID_FANOUT = 0x4f494446; /* "OIDF" */ + + static final int CHUNK_ID_BLOOM_FILTER_INDEX = 0x42494458; /* "BIDX" */ + + static final int CHUNK_ID_BLOOM_FILTER_DATA = 0x42444154; /* "BDAT" */ + + @Argument(index = 0) + private String input; + + static HashSet<String> changedPathStrings(byte[] data) { + int oidf_offset = -1; + int bidx_offset = -1; + int bdat_offset = -1; + for (int i = 8; i < data.length - 4; i += 12) { + switch (NB.decodeInt32(data, i)) { + case CHUNK_ID_OID_FANOUT: + oidf_offset = (int) NB.decodeInt64(data, i + 4); + break; + case CHUNK_ID_BLOOM_FILTER_INDEX: + bidx_offset = (int) NB.decodeInt64(data, i + 4); + break; + case CHUNK_ID_BLOOM_FILTER_DATA: + bdat_offset = (int) NB.decodeInt64(data, i + 4); + break; + } + } + bdat_offset += 12; // skip version, hash count, bits per entry + int commit_count = NB.decodeInt32(data, oidf_offset + 255 * 4); + int[] changed_path_length_cumuls = new int[commit_count]; + for (int i = 0; i < commit_count; i++) { + changed_path_length_cumuls[i] = NB.decodeInt32(data, + bidx_offset + i * 4); + } + HashSet<String> changed_paths = new HashSet<>(); + for (int i = 0; i < commit_count; i++) { + int prior_cumul = i == 0 ? 0 : changed_path_length_cumuls[i - 1]; + String changed_path = ""; //$NON-NLS-1$ + for (int j = prior_cumul; j < changed_path_length_cumuls[i]; j++) { + changed_path += data[bdat_offset + j] + ","; //$NON-NLS-1$ + } + changed_paths.add(changed_path); + } + return changed_paths; + } + + /** {@inheritDoc} */ + @Override + protected void run() throws Exception { + try (FileInputStream in = new FileInputStream(input) + ) { + byte[] data = in.readAllBytes(); + outw.println(changedPathStrings(data).toString()); + } + } +} diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java index 33d1059911..3d20e01d3c 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadDirCache.java @@ -11,8 +11,6 @@ package org.eclipse.jgit.pgm.debug; -import static java.lang.Long.valueOf; - import java.text.MessageFormat; import org.eclipse.jgit.pgm.Command; @@ -21,7 +19,6 @@ import org.eclipse.jgit.pgm.internal.CLIText; @Command(usage = "usage_ReadDirCache") class ReadDirCache extends TextBuiltin { - /** {@inheritDoc} */ @Override protected void run() throws Exception { final int cnt = 100; @@ -31,6 +28,6 @@ class ReadDirCache extends TextBuiltin { final long end = System.currentTimeMillis(); outw.print(" "); //$NON-NLS-1$ outw.println(MessageFormat.format(CLIText.get().averageMSPerRead, - valueOf((end - start) / cnt))); + Long.valueOf((end - start) / cnt))); } } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadReftable.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadReftable.java index 6dace841ea..a2443d315f 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadReftable.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ReadReftable.java @@ -30,7 +30,6 @@ class ReadReftable extends TextBuiltin { @Argument(index = 1, required = false) private String ref; - /** {@inheritDoc} */ @Override protected void run() throws Exception { try (FileInputStream in = new FileInputStream(input); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java index 8d884c12db..22d9e3440a 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/RebuildCommitGraph.java @@ -18,8 +18,8 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.text.MessageFormat; +import java.time.Instant; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.ListIterator; @@ -81,7 +81,6 @@ class RebuildCommitGraph extends TextBuiltin { private Map<ObjectId, ObjectId> rewrites = new HashMap<>(); - /** {@inheritDoc} */ @Override protected void run() throws Exception { if (!really && db.getRefDatabase().hasRefs()) { @@ -167,7 +166,8 @@ class RebuildCommitGraph extends TextBuiltin { final CommitBuilder newc = new CommitBuilder(); newc.setTreeId(emptyTree); - newc.setAuthor(new PersonIdent(me, new Date(t.commitTime))); + newc.setAuthor(new PersonIdent(me, + Instant.ofEpochSecond(t.commitTime))); newc.setCommitter(newc.getAuthor()); newc.setParentIds(newParents); newc.setMessage("ORIGINAL " + t.oldId.name() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCacheTree.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCacheTree.java index 28a8d8634a..da16b33701 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCacheTree.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCacheTree.java @@ -11,8 +11,6 @@ package org.eclipse.jgit.pgm.debug; -import static java.lang.Integer.valueOf; - import java.io.IOException; import java.text.MessageFormat; @@ -24,7 +22,6 @@ import org.eclipse.jgit.pgm.internal.CLIText; @Command(usage = "usage_ShowCacheTree") class ShowCacheTree extends TextBuiltin { - /** {@inheritDoc} */ @Override protected void run() throws Exception { final DirCache cache = db.readDirCache(); @@ -36,8 +33,8 @@ class ShowCacheTree extends TextBuiltin { private void show(DirCacheTree tree) throws IOException { outw.println(MessageFormat.format(CLIText.get().cacheTreePathInfo, - tree.getPathString(), valueOf(tree.getEntrySpan()), - valueOf(tree.getChildCount()))); + tree.getPathString(), Integer.valueOf(tree.getEntrySpan()), + Integer.valueOf(tree.getChildCount()))); for (int i = 0; i < tree.getChildCount(); i++) show(tree.getChild(i)); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCommands.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCommands.java index 9e61357da8..e46d703592 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCommands.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowCommands.java @@ -26,7 +26,6 @@ class ShowCommands extends TextBuiltin { @Option(name = "--pretty", metaVar = "metaVar_commandDetail", usage = "usage_alterTheDetailShown") private Format pretty = Format.USAGE; - /** {@inheritDoc} */ @Override protected void run() throws Exception { final CommandRef[] list = CommandCatalog.all(); @@ -51,7 +50,7 @@ class ShowCommands extends TextBuiltin { } enum Format { - /** */ + /** Get usage */ USAGE { @Override void print(ThrowingPrintWriter err, CommandRef c) throws IOException { @@ -61,7 +60,7 @@ class ShowCommands extends TextBuiltin { } }, - /** */ + /** Get implementation class name */ CLASSES { @Override void print(ThrowingPrintWriter err, CommandRef c) throws IOException { @@ -69,7 +68,7 @@ class ShowCommands extends TextBuiltin { } }, - /** */ + /** Get URL of implementation class */ URLS { @Override void print(ThrowingPrintWriter err, CommandRef c) throws IOException { diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowDirCache.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowDirCache.java index 1f4733f792..96add0f188 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowDirCache.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowDirCache.java @@ -13,8 +13,6 @@ package org.eclipse.jgit.pgm.debug; -import static java.lang.Integer.valueOf; - import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -33,7 +31,6 @@ class ShowDirCache extends TextBuiltin { @Option(name = "--millis", aliases = { "-m" }, usage = "usage_showTimeInMilliseconds") private boolean millis = false; - /** {@inheritDoc} */ @Override protected void run() throws Exception { final DateTimeFormatter fmt = DateTimeFormatter @@ -50,7 +47,7 @@ class ShowDirCache extends TextBuiltin { final int stage = ent.getStage(); outw.print(mode); - outw.format(" %6d", valueOf(len)); //$NON-NLS-1$ + outw.format(" %6d", Integer.valueOf(len)); //$NON-NLS-1$ outw.print(' '); if (millis) { outw.print(mtime.toEpochMilli()); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java index 49f7ada457..80d3503851 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java @@ -31,6 +31,7 @@ import org.eclipse.jgit.pgm.Command; import org.eclipse.jgit.pgm.TextBuiltin; import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.storage.pack.PackConfig; import org.eclipse.jgit.util.TemporaryBuffer; import org.kohsuke.args4j.Argument; @@ -39,7 +40,6 @@ class ShowPackDelta extends TextBuiltin { @Argument(index = 0) private ObjectId objectId; - /** {@inheritDoc} */ @Override protected void run() throws Exception { ObjectReader reader = db.newObjectReader(); @@ -69,10 +69,11 @@ class ShowPackDelta extends TextBuiltin { ObjectReuseAsIs asis = (ObjectReuseAsIs) reader; ObjectToPack target = asis.newObjectToPack(obj, obj.getType()); - PackWriter pw = new PackWriter(reader) { + PackWriter pw = new PackWriter(new PackConfig(), reader) { @Override - public void select(ObjectToPack otp, StoredObjectRepresentation next) { + public boolean select(ObjectToPack otp, StoredObjectRepresentation next) { otp.select(next); + return true; } }; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/TextHashFunctions.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/TextHashFunctions.java index 1ca3034f4f..2ce1711404 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/TextHashFunctions.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/TextHashFunctions.java @@ -10,9 +10,6 @@ package org.eclipse.jgit.pgm.debug; -import static java.lang.Integer.valueOf; -import static java.lang.Long.valueOf; - import java.io.File; import java.lang.reflect.Field; import java.security.MessageDigest; @@ -228,13 +225,11 @@ class TextHashFunctions extends TextBuiltin { @Option(name = "--repository", aliases = { "-r" }, metaVar = "GIT_DIR", usage = "Repository to scan") List<File> gitDirs = new ArrayList<>(); - /** {@inheritDoc} */ @Override protected boolean requiresRepository() { return false; } - /** {@inheritDoc} */ @Override protected void run() throws Exception { if (gitDirs.isEmpty()) { @@ -315,8 +310,8 @@ class TextHashFunctions extends TextBuiltin { outw.println(name + ":"); //$NON-NLS-1$ } outw.format(" %6d files; %5d avg. unique lines/file\n", //$NON-NLS-1$ - valueOf(fileCnt), // - valueOf(lineCnt / fileCnt)); + Long.valueOf(fileCnt), // + Long.valueOf(lineCnt / fileCnt)); outw.format("%-20s %-15s %9s\n", "Hash", "Fold", "Max Len"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ outw.println("-----------------------------------------------"); //$NON-NLS-1$ String lastHashName = null; @@ -327,7 +322,7 @@ class TextHashFunctions extends TextBuiltin { outw.format("%-20s %-15s %9d\n", // //$NON-NLS-1$ hashName, // fun.fold.name, // - valueOf(fun.maxChainLength)); + Integer.valueOf(fun.maxChainLength)); lastHashName = fun.hash.name; } outw.println(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/VerifyReftable.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/VerifyReftable.java index 16a4c9f333..aa1b81f2b6 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/VerifyReftable.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/VerifyReftable.java @@ -42,7 +42,6 @@ class VerifyReftable extends TextBuiltin { @Argument(index = 1) private String reftablePath; - /** {@inheritDoc} */ @Override protected void run() throws Exception { List<Ref> refs = WriteReftable.readRefs(lsRemotePath); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteDirCache.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteDirCache.java index 44836ec0dc..d367f02497 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteDirCache.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteDirCache.java @@ -18,7 +18,6 @@ import org.eclipse.jgit.pgm.internal.CLIText; @Command(usage = "usage_WriteDirCache") class WriteDirCache extends TextBuiltin { - /** {@inheritDoc} */ @Override protected void run() throws Exception { final DirCache cache = db.readDirCache(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteReftable.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteReftable.java index 80d2f763f1..7aff2dd9cd 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteReftable.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/WriteReftable.java @@ -24,6 +24,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; +import java.time.Instant; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -71,7 +73,6 @@ class WriteReftable extends TextBuiltin { @Argument(index = 1) private String out; - /** {@inheritDoc} */ @SuppressWarnings({ "nls", "boxing" }) @Override protected void run() throws Exception { @@ -210,14 +211,15 @@ class WriteReftable extends TextBuiltin { } String ref = m.group(1); double t = Double.parseDouble(m.group(2)); - long time = ((long) t) * 1000L; + Instant time = Instant.ofEpochSecond((long) t); long index = (long) (t * 1e6); String user = m.group(3); ObjectId oldId = parseId(m.group(4)); ObjectId newId = parseId(m.group(5)); String msg = m.group(6); String email = user + "@gerrit"; //$NON-NLS-1$ - PersonIdent who = new PersonIdent(user, email, time, -480); + PersonIdent who = new PersonIdent(user, email, time, + ZoneOffset.ofHours(-8)); log.add(new LogEntry(ref, index, who, oldId, newId, msg)); } } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java index d07268b4c3..bb1e950542 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java @@ -1,6 +1,6 @@ /* * Copyright (C) 2010, 2013 Sasa Zivkov <sasa.zivkov@sap.com> - * Copyright (C) 2013, 2021 Obeo and others + * Copyright (C) 2013, 2025 Obeo and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Distribution License v. 1.0 which is available at @@ -21,6 +21,7 @@ import org.kohsuke.args4j.Localizable; /** * Translation bundle for JGit command line interface */ +@SuppressWarnings("MissingSummary") public class CLIText extends TranslationBundle { /** * Formats text strings using {@code Localizable}. @@ -90,6 +91,7 @@ public class CLIText extends TranslationBundle { } // @formatter:off + /***/ public String addIncompatibleOptions; /***/ public String alreadyOnBranch; /***/ public String alreadyUpToDate; /***/ public String answerNo; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/VerificationUtils.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/VerificationUtils.java index c1f8a86a8c..64ee602620 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/VerificationUtils.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/VerificationUtils.java @@ -11,7 +11,7 @@ package org.eclipse.jgit.pgm.internal; import java.io.IOException; -import org.eclipse.jgit.lib.GpgSignatureVerifier.SignatureVerification; +import org.eclipse.jgit.lib.SignatureVerifier.SignatureVerification; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.util.GitDateFormatter; import org.eclipse.jgit.util.SignatureUtils; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/AbstractTreeIteratorHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/AbstractTreeIteratorHandler.java index d8604726ab..cea2309f7f 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/AbstractTreeIteratorHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/AbstractTreeIteratorHandler.java @@ -63,7 +63,6 @@ public class AbstractTreeIteratorHandler extends clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { final String name = params.getParameter(0); @@ -115,7 +114,6 @@ public class AbstractTreeIteratorHandler extends return 1; } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_treeish; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java index df0b39b52a..463213dc4f 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/CmdLineParser.java @@ -110,7 +110,6 @@ public class CmdLineParser extends org.kohsuke.args4j.CmdLineParser { this.db = repo; } - /** {@inheritDoc} */ @Override public void parseArgument(String... args) throws CmdLineException { final ArrayList<String> tmp = new ArrayList<>(args.length); @@ -265,7 +264,6 @@ public class CmdLineParser extends org.kohsuke.args4j.CmdLineParser { } } - /** {@inheritDoc} */ @Override protected OptionHandler createOptionHandler(OptionDef o, Setter setter) { if (o instanceof NamedOptionDef) { @@ -275,7 +273,6 @@ public class CmdLineParser extends org.kohsuke.args4j.CmdLineParser { } - /** {@inheritDoc} */ @Override public void printSingleLineUsage(Writer w, ResourceBundle rb) { List<OptionHandler> options = getOptions(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/GpgSignHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/GpgSignHandler.java index af90b83d17..56423ada41 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/GpgSignHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/GpgSignHandler.java @@ -53,7 +53,6 @@ public class GpgSignHandler extends StringOptionHandler { super(parser, option, setter); } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { String alias = params.getParameter(-1); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java index feee78e9b6..9c54169888 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/InstantHandler.java @@ -44,7 +44,6 @@ public class InstantHandler extends OptionHandler<Instant> { super(parser, option, setter); } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { Instant instant = Instant.parse(params.getParameter(0)); @@ -52,7 +51,6 @@ public class InstantHandler extends OptionHandler<Instant> { return 1; } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_instant; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/ObjectIdHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/ObjectIdHandler.java index 6cd36c3d98..b50df90788 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/ObjectIdHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/ObjectIdHandler.java @@ -49,7 +49,6 @@ public class ObjectIdHandler extends OptionHandler<ObjectId> { clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { final String name = params.getParameter(0); @@ -68,7 +67,6 @@ public class ObjectIdHandler extends OptionHandler<ObjectId> { CLIText.format(CLIText.get().notAnObject), name); } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_object; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/OptionWithValuesListHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/OptionWithValuesListHandler.java index 7d7c806507..7bb2766fe0 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/OptionWithValuesListHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/OptionWithValuesListHandler.java @@ -33,7 +33,6 @@ public class OptionWithValuesListHandler extends OptionHandler<List<?>> { super(parser, option, setter); } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { final List<String> list = new ArrayList<>(); @@ -50,7 +49,6 @@ public class OptionWithValuesListHandler extends OptionHandler<List<?>> { return list.size(); } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_values; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java index 653511947f..f215040499 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java @@ -49,7 +49,6 @@ public class PathTreeFilterHandler extends OptionHandler<TreeFilter> { super(parser, option, setter); } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { final List<PathFilter> filters = new ArrayList<>(); @@ -73,7 +72,6 @@ public class PathTreeFilterHandler extends OptionHandler<TreeFilter> { return filters.size(); } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_paths; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RefSpecHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RefSpecHandler.java index effa22a697..0491445879 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RefSpecHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RefSpecHandler.java @@ -43,14 +43,12 @@ public class RefSpecHandler extends OptionHandler<RefSpec> { super(parser, option, setter); } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { setter.addValue(new RefSpec(params.getParameter(0))); return 1; } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_refspec; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevCommitHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevCommitHandler.java index 8b2bed36a7..a095a28af8 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevCommitHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevCommitHandler.java @@ -53,7 +53,6 @@ public class RevCommitHandler extends OptionHandler<RevCommit> { clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { String name = params.getParameter(0); @@ -116,7 +115,6 @@ public class RevCommitHandler extends OptionHandler<RevCommit> { setter.addValue(c); } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_commitish; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevTreeHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevTreeHandler.java index 357886d0fa..08f1d28392 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevTreeHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/RevTreeHandler.java @@ -52,7 +52,6 @@ public class RevTreeHandler extends OptionHandler<RevTree> { clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { final String name = params.getParameter(0); @@ -83,7 +82,6 @@ public class RevTreeHandler extends OptionHandler<RevTree> { return 1; } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_treeish; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/SubcommandHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/SubcommandHandler.java index e0962031e8..e71ba90e4b 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/SubcommandHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/SubcommandHandler.java @@ -49,7 +49,6 @@ public class SubcommandHandler extends OptionHandler<TextBuiltin> { clp = (org.eclipse.jgit.pgm.opt.CmdLineParser) parser; } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { final String name = params.getParameter(0); @@ -67,7 +66,6 @@ public class SubcommandHandler extends OptionHandler<TextBuiltin> { return 1; } - /** {@inheritDoc} */ @Override public String getDefaultMetaVariable() { return CLIText.get().metaVar_command; diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/UntrackedFilesHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/UntrackedFilesHandler.java index 3562754a00..2f99cff768 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/UntrackedFilesHandler.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/UntrackedFilesHandler.java @@ -52,7 +52,6 @@ public class UntrackedFilesHandler extends StringOptionHandler { super(parser, option, setter); } - /** {@inheritDoc} */ @Override public int parseArguments(Parameters params) throws CmdLineException { String alias = params.getParameter(-1); |