Do not reload packfiles when their associated filesnapshot is not
modified on disk compared to the one currently stored in memory.
Fix the regression introduced by fef78212 which, in conjunction with
core.trustfolderstats = false, caused any lookup of objects inside
the packlist to loop forever when the object was not found in the pack
list.
Bug: 546190
Change-Id: I38d752ebe47cefc3299740aeba319a2641f19391
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
The prune method did not delete empty fanout directories when loose
objects moved to a new pack file but only when loose unreferenced
objects were pruned.
Change-Id: Ia068f4914c54d9cf9f40b75e8ea50759402b5000
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-5.2:
Prepare 5.1.7-SNAPSHOT builds
JGit v5.1.6.201903130242-r
Prepare 4.11.8-SNAPSHOT builds
JGit v4.11.7.201903122105-r
Prepare 4.9.10-SNAPSHOT builds
JGit v4.9.9.201903122025-r
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: Ia866587a910e620cb297bcb2a81fe0786f4e3db2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-5.1:
Prepare 5.1.7-SNAPSHOT builds
JGit v5.1.6.201903130242-r
Prepare 4.11.8-SNAPSHOT builds
JGit v4.11.7.201903122105-r
Prepare 4.9.10-SNAPSHOT builds
JGit v4.9.9.201903122025-r
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I8da2761ed27ff2817a4136f843b9b293e3c0f4e6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-5.0:
Prepare 4.11.8-SNAPSHOT builds
JGit v4.11.7.201903122105-r
Prepare 4.9.10-SNAPSHOT builds
JGit v4.9.9.201903122025-r
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I71771dcc086a9a0097bad74d65ec71ad97106a38
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.11:
Prepare 4.11.8-SNAPSHOT builds
JGit v4.11.7.201903122105-r
Prepare 4.9.10-SNAPSHOT builds
JGit v4.9.9.201903122025-r
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I04c70f66c6f1e53bdc199fb5b24c9136c9a8e4f7
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.10:
Prepare 4.9.10-SNAPSHOT builds
JGit v4.9.9.201903122025-r
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: Ic66dc00455c05f7627919f682a7221ffeef1629d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.9:
Prepare 4.9.10-SNAPSHOT builds
JGit v4.9.9.201903122025-r
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: Ifcd8ea6a2b59f6f8e9d896d8407cfcaef0a9375d
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.8:
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I9a47153831f8eb10d3cd91b4157cf45385e5b13a
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.7:
Prepare 4.7.9-SNAPSHOT builds
JGit v4.7.8.201903121755-r
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I1136eaa1590b225ceaf16ba7552af0374253a74e
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.6:
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I3d1544d034783fe0fa1385dfe9b03ad8e9247c63
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* stable-4.5:
Prepare 4.5.7-SNAPSHOT builds
JGit v4.5.6.201903121547-r
Check for packfile validity and fd before reading
Move throw of PackInvalidException outside the catch
Use FileSnapshot to get lastModified on PackFile
Include size when comparing FileSnapshot
Do not reuse packfiles when changed on filesystem
Silence API warnings for new API introduced for fixes
Change-Id: I029e1797447e6729de68bd89d4d69b324dbb3f5f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
When reading from a packfile, make sure that is valid
and has a non-null file-descriptor.
Because of concurrency between a thread invalidating a packfile
and another trying to read it, the read() may result into a NPE
that won't be able to be automatically recovered.
Throwing a PackInvalidException would instead cause the packlist
to be refreshed and the read to eventually succeed.
Bug: 544199
Change-Id: I27788b3db759d93ec3212de35c0094ecaafc2434
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
When a packfile is invalid, throw an exception explicitly
outside any catch scope, so that is not accidentally caught
by the generic catch-all cause, which would set the packfile
as valid again.
Flagging an invalid packfile as valid again would have
dangerous consequences such as the corruption of the in-memory
packlist.
Bug: 544199
Change-Id: If7a3188a68d7985776b509d636d5ddf432bec798
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
Do not redundantly call File.lastModified() for extracting the
timestamp of the PackFile but rather use consistently the FileSnapshot
which reads all file attributes in a single bulk call.
Change-Id: I932675ae4fe56dcd3833dac249816f097303bb09
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Due to finite filesystem timestamp resolution the last modified
timestamp of files cannot detect file changes which happened in the
immediate past (less than one filesystem timer tick ago).
Read and consider file size also, so that differing file size can help
to more accurately detect file changes without reading the file content.
Use bulk read to avoid multiple stat calls to retrieve file attributes.
Change-Id: I974288fff78ac78c52245d9218b5639603f67a46
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
The pack reload mechanism from the filesystem works only by name
and does not check the actual last modified date of the packfile.
This lead to concurrency issues where multiple threads were loading
and removing from each other list of packfiles when one of those
was failing the checksum.
Rely on FileSnapshot rather than directly checking lastModified
timestamp so that more checks can be performed.
Bug: 544199
Change-Id: I173328f29d9914007fd5eae3b4c07296ab292390
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
In case of concurrent pack file access, threads may wait on the idx()
function even for already open files. This happens especially with a
slow file system.
Performance numbers are listed in the bug report.
Bug: 543739
Change-Id: Iff328d347fa65ae07ecce3267d44184161248978
Signed-off-by: Juergen Denner <j.denner@sap.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This isolates the test from the concrete system it's running on.
SshSessionFactory reads the user also through SystemReader.
Change-Id: I1c796aa1c498fe3967456d8589e6be0a82ab8f44
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
That method can easily be invoked with a null argument (e.g.
isId(repo.getFullBranch()), therefore it should handle null arguments.
Change was suggested in https://git.eclipse.org/r/#/c/137918/, which
tried to fix the same in egit only.
Bug:544982
Change-Id: I32d1df6e9b2946ab324eda7008721159019316b3
Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
* master:
Update Orbit to R20190226160451
Upgrade maven-javadoc-plugin to 3.1.0
diff: add option metaVar for --src-prefix and --dst-prefix
ResolveMerger: Destroy TemporaryBuffer on unchecked exceptions
Expose the filter blob limit in UploadPack
Upgrade error_prone_core to 2.3.3
On Windows use %APPDATA%\gnupg as GPG directory if it exists
Remove duplicate externalized message
RebaseCommand: tighten check for --preserve-merges on --continue
RebaseCommand: fix ONTO_NAME, and --preserve-merges is interactive
RebaseCommand: use orig-head to abort
Fix core.autocrlf for non-normalized index
RebaseCommand: use orig-head in addition to head
SHA1: Use externalized message in log
JGitText: Remove unnecessary suffix from externalized message identifier
FS_POSIX: Externalize log message
Strongly reference indices in DfsPackFile
Update Orbit to S20190219190953
Update README
Update README
Add missing @since tag for new API method getUpdateIndex
Fix NPE in PlotCommitList
CommitBuilder: Deprecate setEncoding(String)
CommitBuilder: Add missing periods on methods' Javadoc
Upgrade wagon-ssh to 3.3.2
Fix bug in copyPackBypassCache's skip 'PACK' header logic
Upgrade spotbugs to 3.1.11
Atomic file creation: hard-linking may not be allowed
Update Orbit to S20190129210011
Fix GC.deleteEmptyRefsFolders
Enable cloning only specific tags
Delete jgit-4.5 target platform
Add 4.11-staging target platform and update Orbit to I20190123233226
Upgrade jacoco-maven-plugin to 0.8.3
Bazel: Format BUILD file with buildifier
RenameBranchCommand: more consistent handling of short ref names
SshdSessionFactory: generalize providing default keys
Allow to check for signing key
Handle premature EOF in BundleFetchConnection
pgm: Fix missing braces in Version.run()
pgm: Handle IOException in Version command
pgm: Fix missing braces in UploadPack.run()
pgm: Handle IOException in UploadPack command
pgm: Handle exceptions in Tag command
pgm: Fix missing braces in Status.run()
pgm: Handle exceptions in Status command
pgm: Fix missing braces in ShowRef.run()
pgm: Handle IOException in ShowRef command
pgm: Fix missing braces in Show.run()
pgm: Handle exceptions in Show command
pgm: Fix missing braces in Rm command
pgm: Handle GitAPIException in Rm command
pgm: Handle exceptions in RevParse command
pgm: Externalize error message
pgm: Fix missing braces in Reset.run()
pgm: Handle GitAPIException in Reset command
pgm: Handle GitAPIException in Repo command
pgm: Handle exceptions in Remote command
pgm: Handle exceptions in Reflog command
pgm: Handle IOException in ReceivePack command
SmartClientSmartServerTest: Open Repository in try-with-resource
SmartClientSmartServerTest: Open ObjectInserter.Formatter in try-with-resource
SmartClientSmartServerTest#addBrokenContext: Remove unused TestRepository
IO: Open TemporaryBuffer.Heap in try-with-resource
GitSmartHttpTools: Open SideBandOutputStream in try-with-resource
TemporaryBufferTest: Open TemporaryBuffer in try-with-resource
Scanner: Open RevWalk in try-with-resource
SubmoduleWalkTest: Open Repository in try-with-resource
SideBandOutputStreamTest: Open SideBandOutputStream in try-with-resource
UnionInputStreamTest: Open UnionInputStream in try-with-resource
Merge: Avoid non-localised literal string warning for "recursive"
pgm: Fix missing braces in Push.run()
pgm: Handle exceptions in Push command
pgm: Fix missing braces in MergeBase.run()
pgm: Handle IOException in MergeBase command
pgm: Fix missing braces in Merge command
pgm: Handle exceptions in Merge command
pgm: Fix missing braces in LsTree.run()
pgm: Handle exceptions in LsTree command
pgm: Fix missing braces in LsRemote.run()
pgm: Handle exceptions in LsRemote command
pgm: Handle exceptions in LsFiles command
pgm: Fix missing braces in Log.run()
pgm: Handle exceptions in Log command
pgm: Handle exceptions in Init command
pgm: Handle IOException in IndexPack command
pgm: Fix missing braces in Fetch.run()
pgm: Handle IOException in Fetch command
pgm: Handle GitAPIException in Gc command
pgm: Fix missing braces in DiffTree.run()
pgm: Handle exceptions in DiffTree command
pgm: Fix missing braces in Diff.run()
pgm: Handle exceptions in Diff command
RawParseUtils: Avoid import of java.nio.charset.StandardCharsets
Consistently import constants from StandardCharsets as static
LocalDiskRepositoryTestCase#createRepository: Default auto-close to false
UploadPack: Suppress false-positive resource leak warning
PushConnectionTest: Open TestRepository in try-with-resource
MergerTest: Open TestRepository in try-with-resource
MergeCommandTest: Open TestRepository in try-with-resource
PackWriterTest: Open TestRepository in try-with-resource
ReceivePackAdvertiseRefsHookTest: Open TestRepository in try-with-resource
SubmoduleStatusTest: Open TestRepository in try-with-resource
UploadPackTest: Open TestRepository in try-with-resource
PackParserTest: Open TestRepository in try-with-resource
SmartClientSmartServerTest: Open TestRepository in try-with-resource
Stop using deprecated methods of RemoteSetUrlCommand/RemoteRemoveCommand
SmartClientSmartServerTest: Stop using deprecated Repository#hasObject
DumbClientSmartServerTest: Open TestRepository in try-with-resource
DumbClientDumbServerTest: Open TestRepository in try-with-resource
DirCacheCheckoutTest: Open TestRepository in try-with-resource
HttpTestCase#fsck: Open TestRepository in try-with-resource
CheckoutCommandTest: Add comment to document intentionally empty catch block
pgm: Fix missing braces in Describe.run()
pgm: Handle exceptions in Describe command
pgm: Handle exceptions in Config command
pgm: Fix too wide lines in Commit.run()
pgm: Fix missing braces in Commit.run()
pgm: Handle exceptions in Commit command
pgm: Handle exceptions in Clean command
pgm: Handle GitAPIException in Fetch command
Fix missing braces in Branch.run()
pgm: Handle exceptions in Branch command
Fix missing braces in Blame.run()
pgm: Handle NoWorkTreeException and IOException in Blame command
Use try-with-resource for reader in Blame.run()
pgm: Handle GitAPIException in Add command
Change-Id: I6d546885beb9596120e201973995a7c6bfe115e0
* stable-5.2:
Fix error log message in ObjectDirectory.handlePackError()
Properly format pack checksums in PackFile.idx()
Cancel gc if thread was interrupted
PackFile: report correct message for checksum mismatch
ObjectDirectory: Clean up logging
Bazel: Stop using native.git_repository
ObjectDirectory: extra logging on packfile exceptions
Change-Id: I81cf1cdc9d8dcd54536a79e522274fd244fa1d00