* stable-5.6: Prepare 5.3.9-SNAPSHOT builds JGit v5.3.8.202011260953-r Prepare 5.1.15-SNAPSHOT builds JGit v5.1.14.202011251942-r GC#deleteOrphans: log warning for deleted orphaned files GC#deleteOrphans: handle failure to list files in pack directory Ensure that GC#deleteOrphans respects pack lock Update API warning filters Remove unused imports Change-Id: Ie24d381f295cccfb99068c7ed5817179da29c1db Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>tags/v5.10.0.202012021225-rc1
<?xml version="1.0" encoding="UTF-8"?> | |||||
<feature | |||||
id="org.eclipse.jgit.pgm.source" | |||||
label="%featureName" | |||||
version="5.3.9.qualifier" | |||||
provider-name="%providerName"> | |||||
<description url="http://www.eclipse.org/jgit/"> | |||||
%description | |||||
</description> | |||||
<copyright> | |||||
%copyright | |||||
</copyright> | |||||
<license url="%licenseURL"> | |||||
%license | |||||
</license> | |||||
<url> | |||||
<update label="%updateSiteName" url="http://download.eclipse.org/egit/updates"/> | |||||
<discovery label="%updateSiteName" url="http://download.eclipse.org/egit/updates"/> | |||||
</url> | |||||
<plugin | |||||
id="org.eclipse.jgit.pgm.source" | |||||
download-size="0" | |||||
install-size="0" | |||||
version="0.0.0" | |||||
unpack="false"/> | |||||
</feature> |
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!-- | |||||
Copyright (C) 2012, Matthias Sohn <matthias.sohn@sap.com> | |||||
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 v1.0 which | |||||
accompanies this distribution, is reproduced below, and is | |||||
available at http://www.eclipse.org/org/documents/edl-v10.php | |||||
All rights reserved. | |||||
Redistribution and use in source and binary forms, with or | |||||
without modification, are permitted provided that the following | |||||
conditions are met: | |||||
- Redistributions of source code must retain the above copyright | |||||
notice, this list of conditions and the following disclaimer. | |||||
- Redistributions in binary form must reproduce the above | |||||
copyright notice, this list of conditions and the following | |||||
disclaimer in the documentation and/or other materials provided | |||||
with the distribution. | |||||
- Neither the name of the Eclipse Foundation, Inc. nor the | |||||
names of its contributors may be used to endorse or promote | |||||
products derived from this software without specific prior | |||||
written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
--> | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<parent> | |||||
<groupId>org.eclipse.jgit</groupId> | |||||
<artifactId>jgit.tycho.parent</artifactId> | |||||
<version>5.3.9-SNAPSHOT</version> | |||||
</parent> | |||||
<groupId>org.eclipse.jgit.feature</groupId> | |||||
<artifactId>org.eclipse.jgit.pgm.source</artifactId> | |||||
<packaging>eclipse-feature</packaging> | |||||
<name>JGit Command Line Interface Source Feature</name> | |||||
</project> |
<?xml version="1.0" encoding="UTF-8"?> | |||||
<feature | |||||
id="org.eclipse.jgit.ssh.apache.source" | |||||
label="%featureName" | |||||
version="5.3.9.qualifier" | |||||
provider-name="%providerName"> | |||||
<description url="http://www.eclipse.org/jgit/"> | |||||
%description | |||||
</description> | |||||
<copyright> | |||||
%copyright | |||||
</copyright> | |||||
<license url="%licenseURL"> | |||||
%license | |||||
</license> | |||||
<url> | |||||
<update label="%updateSiteName" url="http://download.eclipse.org/egit/updates"/> | |||||
<discovery label="%updateSiteName" url="http://download.eclipse.org/egit/updates"/> | |||||
</url> | |||||
<plugin | |||||
id="org.eclipse.jgit.ssh.apache.source" | |||||
download-size="0" | |||||
install-size="0" | |||||
version="0.0.0" | |||||
unpack="false"/> | |||||
</feature> |
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!-- | |||||
Copyright (C) 2018 Thomas Wolf <thomas.wolf@paranor.ch> | |||||
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 v1.0 which | |||||
accompanies this distribution, is reproduced below, and is | |||||
available at http://www.eclipse.org/org/documents/edl-v10.php | |||||
All rights reserved. | |||||
Redistribution and use in source and binary forms, with or | |||||
without modification, are permitted provided that the following | |||||
conditions are met: | |||||
- Redistributions of source code must retain the above copyright | |||||
notice, this list of conditions and the following disclaimer. | |||||
- Redistributions in binary form must reproduce the above | |||||
copyright notice, this list of conditions and the following | |||||
disclaimer in the documentation and/or other materials provided | |||||
with the distribution. | |||||
- Neither the name of the Eclipse Foundation, Inc. nor the | |||||
names of its contributors may be used to endorse or promote | |||||
products derived from this software without specific prior | |||||
written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | |||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | |||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
--> | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<parent> | |||||
<groupId>org.eclipse.jgit</groupId> | |||||
<artifactId>jgit.tycho.parent</artifactId> | |||||
<version>5.3.9-SNAPSHOT</version> | |||||
</parent> | |||||
<groupId>org.eclipse.jgit.feature</groupId> | |||||
<artifactId>org.eclipse.jgit.ssh.apache.source</artifactId> | |||||
<packaging>eclipse-feature</packaging> | |||||
<name>JGit Apache MINA ssh Source Feature</name> | |||||
</project> |
private static final String BITMAP_File_1 = PACK + "-1.bitmap"; | private static final String BITMAP_File_1 = PACK + "-1.bitmap"; | ||||
private static final String BITMAP_File_2 = PACK + "-2.bitmap"; | |||||
private static final String IDX_File_2 = PACK + "-2.idx"; | private static final String IDX_File_2 = PACK + "-2.idx"; | ||||
private static final String IDX_File_malformed = PACK + "-1234idx"; | private static final String IDX_File_malformed = PACK + "-1234idx"; | ||||
private static final String KEEP_File_2 = PACK + "-2.keep"; | |||||
private static final String PACK_File_2 = PACK + "-2.pack"; | private static final String PACK_File_2 = PACK + "-2.pack"; | ||||
private static final String PACK_File_3 = PACK + "-3.pack"; | private static final String PACK_File_3 = PACK + "-3.pack"; | ||||
assertTrue(new File(packDir, IDX_File_malformed).exists()); | assertTrue(new File(packDir, IDX_File_malformed).exists()); | ||||
} | } | ||||
@Test | |||||
public void keepPreventsDeletionOfIndexFilesForMissingPackFile() | |||||
throws Exception { | |||||
createFileInPackFolder(BITMAP_File_1); | |||||
createFileInPackFolder(IDX_File_2); | |||||
createFileInPackFolder(BITMAP_File_2); | |||||
createFileInPackFolder(KEEP_File_2); | |||||
createFileInPackFolder(PACK_File_3); | |||||
gc.gc(); | |||||
assertFalse(new File(packDir, BITMAP_File_1).exists()); | |||||
assertTrue(new File(packDir, BITMAP_File_2).exists()); | |||||
assertTrue(new File(packDir, IDX_File_2).exists()); | |||||
assertTrue(new File(packDir, KEEP_File_2).exists()); | |||||
assertTrue(new File(packDir, PACK_File_3).exists()); | |||||
} | |||||
private void createFileInPackFolder(String fileName) throws IOException { | private void createFileInPackFolder(String fileName) throws IOException { | ||||
if (!packDir.exists() || !packDir.isDirectory()) { | if (!packDir.exists() || !packDir.isDirectory()) { | ||||
assertTrue(packDir.mkdirs()); | assertTrue(packDir.mkdirs()); |
deepenSinceWithDeepen=Cannot combine deepen with deepen-since | deepenSinceWithDeepen=Cannot combine deepen with deepen-since | ||||
deleteBranchUnexpectedResult=Delete branch returned unexpected result {0} | deleteBranchUnexpectedResult=Delete branch returned unexpected result {0} | ||||
deleteFileFailed=Could not delete file {0} | deleteFileFailed=Could not delete file {0} | ||||
deletedOrphanInPackDir=Deleted orphaned file {} | |||||
deleteRequiresZeroNewId=Delete requires new ID to be zero | deleteRequiresZeroNewId=Delete requires new ID to be zero | ||||
deleteTagUnexpectedResult=Delete tag returned unexpected result {0} | deleteTagUnexpectedResult=Delete tag returned unexpected result {0} | ||||
deletingNotSupported=Deleting {0} not supported. | deletingNotSupported=Deleting {0} not supported. |
/***/ public String deepenSinceWithDeepen; | /***/ public String deepenSinceWithDeepen; | ||||
/***/ public String deleteBranchUnexpectedResult; | /***/ public String deleteBranchUnexpectedResult; | ||||
/***/ public String deleteFileFailed; | /***/ public String deleteFileFailed; | ||||
/***/ public String deletedOrphanInPackDir; | |||||
/***/ public String deleteRequiresZeroNewId; | /***/ public String deleteRequiresZeroNewId; | ||||
/***/ public String deleteTagUnexpectedResult; | /***/ public String deleteTagUnexpectedResult; | ||||
/***/ public String deletingNotSupported; | /***/ public String deletingNotSupported; |
private static final String INDEX_EXT = "." + PackExt.INDEX.getExtension(); //$NON-NLS-1$ | private static final String INDEX_EXT = "." + PackExt.INDEX.getExtension(); //$NON-NLS-1$ | ||||
private static final String KEEP_EXT = "." + PackExt.KEEP.getExtension(); //$NON-NLS-1$ | |||||
private static final int DEFAULT_AUTOPACKLIMIT = 50; | private static final int DEFAULT_AUTOPACKLIMIT = 50; | ||||
private static final int DEFAULT_AUTOLIMIT = 6700; | private static final int DEFAULT_AUTOLIMIT = 6700; | ||||
fileNames = files.map(path -> path.getFileName().toString()) | fileNames = files.map(path -> path.getFileName().toString()) | ||||
.filter(name -> (name.endsWith(PACK_EXT) | .filter(name -> (name.endsWith(PACK_EXT) | ||||
|| name.endsWith(BITMAP_EXT) | || name.endsWith(BITMAP_EXT) | ||||
|| name.endsWith(INDEX_EXT))) | |||||
|| name.endsWith(INDEX_EXT) | |||||
|| name.endsWith(KEEP_EXT))) | |||||
// sort files with same base name in the order: | |||||
// .pack, .keep, .index, .bitmap to avoid look ahead | |||||
.sorted(Collections.reverseOrder()) | .sorted(Collections.reverseOrder()) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
} catch (IOException e1) { | |||||
// ignore | |||||
} catch (IOException e) { | |||||
LOG.error(e.getMessage(), e); | |||||
return; | |||||
} | } | ||||
if (fileNames == null) { | if (fileNames == null) { | ||||
return; | return; | ||||
String base = null; | String base = null; | ||||
for (String n : fileNames) { | for (String n : fileNames) { | ||||
if (n.endsWith(PACK_EXT)) { | |||||
if (n.endsWith(PACK_EXT) || n.endsWith(KEEP_EXT)) { | |||||
base = n.substring(0, n.lastIndexOf('.')); | base = n.substring(0, n.lastIndexOf('.')); | ||||
} else { | } else { | ||||
if (base == null || !n.startsWith(base)) { | if (base == null || !n.startsWith(base)) { | ||||
try { | try { | ||||
Files.delete(packDir.resolve(n)); | |||||
Path delete = packDir.resolve(n); | |||||
Files.delete(delete); | |||||
LOG.warn(JGitText.get().deletedOrphanInPackDir, delete); | |||||
} catch (IOException e) { | } catch (IOException e) { | ||||
LOG.error(e.getMessage(), e); | LOG.error(e.getMessage(), e); | ||||
} | } |