aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse
Commit message (Collapse)AuthorAgeFilesLines
* Respect "unshallow" lines in protocol v2Jonathan Nieder2018-06-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If I run git config --global protocol.version 2 mkdir repo cd repo git init --bare git remote add origin https://go.googlesource.com/proposal git fetch --depth=1 git fetch --unshallow then I expect to have a full history, just as though I had fetched without --depth in the first place. Instead, it reports success but does not fetch enough objects: $ git fsck notice: HEAD points to an unborn branch (master) Checking object directories: 100% (256/256), done. Checking objects: 100% (468/468), done. broken link from commit 2c6bc83f234085c8eadb7ea33405ce6223c44d1b to commit 878975cf2b600675b4c905e5d9591bd24541ae9e missing commit 878975cf2b600675b4c905e5d9591bd24541ae9e dangling commit 314be00dae78dd526851f5635e6349014e2ad0c2 The false success indicates problems in the client and the server. Git 2.18-rc2 (the client) ought to have been more defensive, noticing the incomplete history. The greater error is in JGit (the server), which neglects to send the objects requested. When serving protocol v0 requests, JGit sends the correct objects by taking unshallowCommits into account when generating the pack to send to the client. Do the same in the protocol v2 code path. I forgot to do this in v5.0.0.201806050710-rc3~6 (Teach UploadPack shallow fetch in protocol v2, 2018-03-15). Reported-by: Russ Cox <rsc@golang.org> Change-Id: I282b45f47616a641b9e8d6210b4a070d3efdbb9b Signed-off-by: Jonathan Nieder <jrn@google.com>
* Propagate failure of ssh command to caller of SshSupportMatthias Sohn2018-06-132-4/+23
| | | | | | | | | | | | When SshSupport.runSshCommand fails since the executed external ssh command failed throw a CommandFailedException. If discovery of LFS server fails due to failure of the git-lfs-authenticate command chain the CommandFailureException to the LfsConfigInvalidException in order to allow root cause analysis in the application using that. Change-Id: I2f9ea2be11274549f6d845937164c248b3d840b2 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Make JGit describe behaves same as c-git for lightweight tagsMarcel Trautwein2018-06-131-2/+42
| | | | | | | | | | | | | | | | | JGit now considers lightweight tags only if the --tags option is set i.e. `git.describe().setAllTags(true)` has to be set, else the default is now as in c git: Only annotated tags are evaluated unless you pass true equivalent to --tags (or --all) by the option setAllTags. Hint: This (still) doesn't address any difference between c-git `--all` and `!--all --tags` behavior; perhaps this might be a follow up request Bug: 423206 Change-Id: I9a3699756df0b9c6a7c74a7e8887dea0df17c8e7 Signed-off-by: Marcel Trautwein <me+eclipse@childno.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix issues with LFS on GitHub (SSH)Markus Duft2018-06-121-10/+28
| | | | | | | | | | | | | * URIish seems to have a tiny feature (bug?). The path of the URI starts with a '/' only if the URI has a port set (it seems). * GitHub does not return SSH authorization on a single line as Gerrit does - need to account for that. * Increase the SSH git-lfs-authenticate timeout, as GitHub sometimes responds slower than expected. * Guard against NPE in case the download action does not contain any additional headers. Change-Id: Icd1ead3d015479fd4b8bbd42ed42129b0abfb95c Signed-off-by: Markus Duft <markus.duft@ssi-schaefer.com>
* Fix Javadoc typoMichael Keppler2018-06-101-2/+2
| | | | | | Change-Id: Ib4ebc57236bdea663f27295764886413e2550580 Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de> Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Ensure Jsch checks all configured algorithmsThomas Wolf2018-06-101-0/+21
| | | | | | | | | | | | | | | | | | | | | | Jsch checks only for the availability of the algorithms given by Jsch-internal config keys "CheckCiphers", "CheckKexes", and "CheckSignatures". If the ssh config defines any algorithms unknown to Jsch not listed in those keys, it'll still propose them during the negotiation phase, and run into an NPE later on if the server happens to propose such an algorithm and it gets chosen. Jsch reads those "CheckCiphers" and the other values from either a session-local config, or the global static Jsch config. It bypasses ~/.ssh/config for these values. Therefore, copy these values from the config as read from ~/.ssh/config into the session-specific config. That makes Jsch check _all_ configured algorithms up front, discarding any for which it has no implementation. Thus it proposes only algorithms it actually can handle. Bug: 535672 Change-Id: I6a68e54f4d9a3267e895c536bcf3c58099826ad5 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Validate branch names on branch creationMatthias Sohn2018-06-091-6/+26
| | | | | | | | | | | Since v2.16.0-rc0~89^2~1 (branch: correctly reject refs/heads/{-dash,HEAD}, 2017-11-14), native git does not allow branch names - refs/heads/HEAD - starting with '-' Bug: 535655 Change-Id: Ib1c4ec9ea844073901a4ebe6a29ff6cc8ae58e93 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Use constant for ".lock"Matthias Sohn2018-06-085-7/+23
| | | | Change-Id: Id65dc94c970ffd3ca3d3d4a5d57123c95d29e8af Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Simplify locking of FileRepository's index snapshotMatthias Sohn2018-06-081-10/+3
| | | | | | synchronize on simple Object monitor instead of using ReentrantLock Change-Id: I897020ab35786336b51b0fef76ea6071aff8aefa Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Refactor FileRepository.detectIndexChange()Matthias Sohn2018-06-081-6/+6
| | | | Change-Id: I50c751e2e90f685dc27043c569da2eb210d4611b Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Ensure index change event is fired when index snapshot changedMatthias Sohn2018-06-061-9/+26
| | | | | | | Ensure that notifyIndexChanged is called every time we call FileSnapshot.save, except the first. Change-Id: I5a4e9826e791f518787366ae7c3a0ef3d416d2c1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Teach UploadPack "filter" in protocol v2 fetchJonathan Tan2018-06-041-1/+12
| | | | | | | | | If the configuration variable uploadpack.allowfilter is true, advertise that "filter" is supported, and support it if the client sends such an argument. Change-Id: I7de66c0a0ada46ff71c5ba124d4ffa7c47254c3b Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
* Refactor v2 advertisement into own functionJonathan Tan2018-06-041-10/+10
| | | | | | | | | A subsequent patch needs dynamic generation of this advertisement depending on a configuration variable in the underlying repository, so refactor it into a function instead of using a constant list. Change-Id: Ie00584add1fb56c9e88c7b57f75703981ea5bb85 Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
* Refactor parsing of "filter" into its own methodJonathan Tan2018-06-041-24/+28
| | | | | | | | The implementation of protocol v2 will also need to parse the "filter" option, so refactor it into its own method. Change-Id: I751f6e6ca63fab873298594653a3885202297a2e Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
* Disallow unknown args to "fetch" in protocol v2Jonathan Tan2018-06-041-1/+3
| | | | | | | | | | JGit's implementation of the fetch command of protocol v2, unlike its implementation of ls-refs, currently tolerates unknown arguments. Tighten fetch to not allow unrecognized arguments and add tests to verify this behavior for both ls-refs and fetch. Change-Id: I321161d568bd638252fab1a47b06b924d472a669 Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
* Teach UploadPack shallow fetch in protocol v2Jonathan Tan2018-06-043-8/+122
| | | | | | | | | | | | Add support for the "shallow" and "deepen" parameters in the "fetch" command in the fetch-pack/upload-pack protocol v2. Advertise support for this in the capability advertisement. TODO: implement deepen-relative, deepen-since, deepen-not Change-Id: I7ffd80d6c38872f9d713ac7d6e0412106b3766d7 Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* Refactor unshallowCommits to local variableJonathan Tan2018-06-041-12/+24
| | | | | | | | | | This reduces the amount of state held as instance variables in UploadPack, and makes it easier for a future patch to contain a clearer version of UploadPack#processShallow. Change-Id: I6df80b42f9e5118fda1420692e02e417670cced3 Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* Add protocol v2 support in httpJonathan Tan2018-06-041-2/+28
| | | | | | | | | | | Teach UploadPack to support protocol v2 with non-bidirectional pipes, and add support to the HTTP protocol for v2. This is only activated if the repository's config has "protocol.version" equal to 2. Change-Id: I093a14acd2c3850b8b98e14936a716958f35a848 Helped-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* Chain RemoteAddCommand methodsMincong HUANG2018-06-021-2/+8
| | | | | Change-Id: I1cf64c90a5cd2220034810b0d65d59582b420c4e Signed-off-by: Mincong Huang <mincong.h@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Don't prune symbolic refs when fetch.prune = trueThomas Wolf2018-05-251-0/+3
| | | | | | | | | | | | | | The canonical implementation also doesn't. Compare current code in remote.c, function get_stale_heads_cb.[1] Not handling symrefs in this case was introduced in canonical git in [2] in 2008. [1] https://github.com/git/git/blob/v2.17.0/remote.c#L2259 [2] https://github.com/git/git/commit/740fdd27f0 Bug: 533549 Change-Id: If348d56bb4a96b8aa7141f7e7b5a0d3dd4e7808b Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* DescribeCommand: Refactor to not use deprecated Repository#peelDavid Pursehouse2018-05-221-5/+9
| | | | | Change-Id: I76073ad62d1bc4fc21d8a1f5fc7eb92060a73baa Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Repository: Deprecate #peel methodDavid Pursehouse2018-05-225-5/+7
| | | | | | | | | | | | | | Callers should use getRefDatabase().peel(ref) instead since it doesn't swallow the IOException. Adapt all trivial callers to user the alternative. DescribeCommand still uses the deprecated method and is not adapted in this change since it will require more refactoring to add handling of the IOException. Change-Id: I14d4a95a5e0570548753b9fc5c03d024dc3ff832 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Repository: Make #exactRef and #findRef finalDavid Pursehouse2018-05-221-2/+2
| | | | | | | | | This means less cognitive overhead for both implementors and callers, since this way we can guarantee that they are always synonyms for RefDatabase#exactRef and RefDatabase#findRef, respectively. Change-Id: Ic8aeb52fc7ed65672f3f6cd1da39a66908d88baa Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Skip ignored directories in FileTreeIteratorThomas Wolf2018-05-222-2/+72
| | | | | | | | | | | | | | | | | | | | | | | | | Make FileTreeIterator not enter ignored directories by default. We only need to enter ignored directories if we do some operation against git, and there is at least one tracked file underneath an ignored directory. Walking ignored directories should be avoided as much as possible as it is a potential performance bottleneck. Some projects have a lot of files or very deep hierarchies in ignored directories; walking those may be costly (especially so on Windows). See for instance also bug 500106. Provide a FileTreeIterator.setWalkIgnoredDirectories() operation to force the iterator to iterate also through otherwise ignored directories. Useful for tests (IgnoreNodeTest, CGitIgnoreTest), or to implement things like "git ls-files --ignored". Add tests in DirCacheCheckoutTest, and amend IndexDiffTest to test a little bit more. Bug: 388582 Change-Id: I6ff584a42c55a07120a4369fd308409431bdb94a Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Repository: Deprecate getTags methodDavid Pursehouse2018-05-221-0/+2
| | | | | | | | | | Callers should use getRefDatabase().getRefsByPrefix(R_TAGS) instead. Adjust the tests accordingly. Bug: 534731 Change-Id: Ib28ae365e42720268996ff46e34cae1745ad545c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* RefAdvertiser: Add send(Collection<Ref>) and deprecate send(Map<String, Ref>)David Pursehouse2018-05-211-10/+23
| | | | | | Bug: 534731 Change-Id: If15032a34dc62f420569e2b2b6d8e14e2dfed522 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Remove further unnecessary 'final' keywordsHan-Wen Nienhuys2018-05-18139-435/+435
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove it from * package private functions. * try blocks * for loops this was done with the following python script: $ cat f.py import sys import re import os def replaceFinal(m): return m.group(1) + "(" + m.group(2).replace('final ', '') + ")" methodDecl = re.compile(r"^([\t ]*[a-zA-Z_ ]+)\(([^)]*)\)") def subst(fn): input = open(fn) os.rename(fn, fn + "~") dest = open(fn, 'w') for l in input: l = methodDecl.sub(replaceFinal, l) dest.write(l) dest.close() for root, dirs, files in os.walk(".", topdown=False): for f in files: if not f.endswith('.java'): continue full = os.path.join(root, f) print full subst(full) Change-Id: If533a75a417594fc893e7c669d2c1f0f6caeb7ca Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* Execute AdvertiseRefsHook only for protocol v0 and v1Masaya Suzuki2018-05-171-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | Refs are not advertised as part of the protocol v2 capability advertisement. Don't call AdvertiseRefsHook. Noticed because many implementations of AdvertiseRefsHook read all refs in order to call UploadPack#setAdvertisedRefs, causing the capability advertisement to be as slow as a v0 ref advertisement with some RefDatabase implementations. Such an AdvertiseRefsHook is of dubious utility (a better place to determine which refs are advertised is in the RefDatabase implementation itself, as in Gerrit), but at any rate since it's not bringing about any benefit here, we can skip the hook call. TODO: - call an appropriate hook instead (https://bugs.eclipse.org/534847) - add tests [jn: fleshed out commit message; added TODO notes] Change-Id: I6eb60ccfb251a45432954467a9ae9c1079a8c8b5 Signed-off-by: Masaya Suzuki <masayasuzuki@google.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* Add protocol v2 support in "jgit daemon"Jonathan Tan2018-05-163-6/+29
| | | | | | | | | | | | | | | With this patch, a server spawned by "jgit daemon" can be accessed using protocol v2 from a Git client that supports it (for example, "git" with the appropriate patches). This is only activated if the repository's config has "protocol.version" be 2. This required a change to the package-private #execute methods in DaemonService to allow passing of extra parameters. This has been tested with a patched Git. Change-Id: Icf043efec7ce956d72b075fc6dc7a87d5a2da82a Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
* Teach UploadPack "ofs-delta" in "fetch"Jonathan Tan2018-05-161-0/+2
| | | | | | | | Add support for the "ofs-delta" parameter in the "fetch" command in the fetch-pack/upload-pack protocol v2. Change-Id: I728cf986082fce4ddeb6a6435897692e15e60cc7 Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
* Teach UploadPack "include-tag" in "fetch"Jonathan Tan2018-05-161-1/+8
| | | | | | | | | | | | | | Add support for the "include-tag" parameter in the "fetch" command in the fetch-pack/upload-pack protocol v2. In order to determine which tags to include, only objects pointed to by refs starting with "refs/tags/" are checked. This restriction is for performance reasons and to match the behavior of Git (see add_ref_tag() in builtin/pack-objects.c). Change-Id: I7d70aa09bcc8a525218ff1559e286c2a610258ca Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* Avoid using #refs in UploadPack#sendPackJonathan Tan2018-05-161-9/+41
| | | | | | | | | | | | | | | | | | | | | When OPTION_INCLUDE_TAG is set, UploadPack#sendPack uses the #refs instance variable as a source of information of tags. A subsequent patch will need to supply this information to #sendPack without modifying #refs, so refactor #sendPack to take in this information through a parameter instead. Note that prior to this patch, #refs was used twice in #sendPack: once to generate the argument to PackWriter#setTagTargets, and once to determine if any tags need to be included in the packfile. This patch only updates the latter use, since the former is meant not only for "true" tag targets but any object that should be hoisted earlier during packing (see the documentation of PackWriter#setTagTargets). This patch does not introduce any functionality change. Change-Id: I70ed65a1041334abeda8d4bac98cce7cae7efcdf Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
* FileRepository: Don't use deprecated RefDatabase#getRefs(String)David Pursehouse2018-05-151-3/+1
| | | | | Change-Id: Iec58c973537ddbe0f4e6b8b62fcda5cecc961661 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* BatchRefUpdate: Don't use deprecated RefDatabase#getRefs(String)David Pursehouse2018-05-151-2/+4
| | | | | Change-Id: I672c9cfe221ddc4acbde7a8040bd6ba83b16626e Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Remove 'final' in parameter listsHan-Wen Nienhuys2018-05-15266-1075/+1075
| | | | | Change-Id: Id924f79c8b2c720297ebc49bf9c5d4ddd6d52547 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* Fixup javadoc and formatting in RawText and RawParseUtilsHan-Wen Nienhuys2018-05-142-25/+30
| | | | | Change-Id: I9d6002941a33ec204d29e4fd920dde965387bb24 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* RawParseUtils#lineMap: Simplify by using null sentinel internallyJonathan Nieder2018-05-141-13/+11
| | | | | | | | | | Add an internal lineMapOrNull helper that returns null when the file is binary. This is simpler than using an exception for control flow and avoids having to override fillInStackTrace to avoid a performance regression. Change-Id: Ib8bb8df6a6bbd60c62cfb3b4c484a962a98b7507
* Store in IndexChangedEvent if it was caused by JGit itselfMatthias Sohn2018-05-135-18/+52
| | | | | | | This allows to differentiate if index was changed by an external git command or by JGit itself. Change-Id: Iae692ba7d9bf01a288b3fb2dc2d07aec9891c712 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Introduce new RawText constructor and RawParseUtils.lineMapOrBinaryHan-Wen Nienhuys2018-05-122-9/+57
| | | | | | | | | | | This makes binary detection exact in ResolveMerger and DiffFormatter This has the same intention as Id4342a199628d9406bfa04af1b023c27a47d4014 but preserves backward compatibility of the signature of RawParseUtils.lineMap. Change-Id: Ia24a4e716592bab3363ae24e3a46315a7511154f Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Use a secure random generator to seed nonce for digest authenticationMatthias Sohn2018-05-111-2/+2
| | | | | | | | | | | | | https://tools.ietf.org/html/rfc7616 says: 5.12. Parameter Randomness The security of this protocol is critically dependent on the randomness of the randomly chosen parameters, such as client and server nonces. These should be generated by a strong random or properly seeded pseudorandom source (see [RFC4086]). Change-Id: I4da5316cb1eb3f59ae06c070ce1c3335e9ee87d6 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge branch 'stable-4.11'Matthias Sohn2018-05-102-30/+55
|\ | | | | | | | | | | | | | | * stable-4.11: Retry stale file handles on .git/config file Change-Id: I4fe6152c3c40dde9cb88913cc9706852de0fd712 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Merge branch 'stable-4.10' into stable-4.11Matthias Sohn2018-05-102-30/+55
| |\ | | | | | | | | | | | | | | | | | | * stable-4.10: Retry stale file handles on .git/config file Change-Id: Ice5c8ae8c2992243a81da77e166406bc1930fe0e
| | * Merge branch 'stable-4.9' into stable-4.10Matthias Sohn2018-05-102-30/+55
| | |\ | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.9: Retry stale file handles on .git/config file Change-Id: I6db7256dbd1c71b23e1231809642ca21e996e066 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| | | * Merge branch 'stable-4.8' into stable-4.9Matthias Sohn2018-05-102-31/+55
| | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.8: Retry stale file handles on .git/config file Change-Id: Ib029b5536c038190626e7a7ff43b70f0a5673721
| | | | * Merge branch 'stable-4.7' into stable-4.8Matthias Sohn2018-05-102-31/+55
| | | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.7: Retry stale file handles on .git/config file Change-Id: Ib665c094b28eefb8236752bb273de0c2d9bf9578
| | | | | * Merge branch 'stable-4.6' into stable-4.7Matthias Sohn2018-05-102-31/+55
| | | | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.6: Retry stale file handles on .git/config file Change-Id: If5a21d38224528edfc551b3216daca6a2582e3ac
| | | | | | * Merge branch 'stable-4.5' into stable-4.6Matthias Sohn2018-05-102-31/+55
| | | | | | |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.5: Retry stale file handles on .git/config file Change-Id: Ib6e6ec0846c3ef261ec1016bfa6d26d2eadc3f26
| | | | | | | * Retry stale file handles on .git/config fileNasser Grainawi2018-05-102-31/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On a local non-NFS filesystem the .git/config file will be orphaned if it is replaced by a new process while the current process is reading the old file. The current process successfully continues to read the orphaned file until it closes the file handle. Since NFS servers do not keep track of open files, instead of orphaning the old .git/config file, such a replacement on an NFS filesystem will instead cause the old file to be garbage collected (deleted). A stale file handle exception will be raised on NFS clients if the file is garbage collected (deleted) on the server while it is being read. Since we no longer have access to the old file in these cases, the previous code would just fail. However, in these cases, reopening the file and rereading it will succeed (since it will open the new replacement file). Since retrying the read is a viable strategy to deal with stale file handles on the .git/config file, implement such a strategy. Since it is possible that the .git/config file could be replaced again while rereading it, loop on stale file handle exceptions, up to 5 extra times, trying to read the .git/config file again, until we either read the new file, or find that the file no longer exists. The limit of 5 is arbitrary, and provides a safe upper bounds to prevent infinite loops consuming resources in a potential unforeseen persistent error condition. Change-Id: I6901157b9dfdbd3013360ebe3eb40af147a8c626 Signed-off-by: Nasser Grainawi <nasser@codeaurora.org> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | | | | | | | Replace http://errorprone.info with https://errorprone.infoJonathan Nieder2018-05-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That site serves from https now. Reported-by: Nicholas Glorioso <glorioso@google.com> Change-Id: I2150a18425a1fe3ab5a022882ffe06ccbde17f16 Signed-off-by: Jonathan Nieder <jrn@google.com>
* | | | | | | | ssh: Kill the external process when we're done instead of waiting foreverCarsten Pfeiffer2018-05-021-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug: 529463 Change-Id: Iaf6fe20a1c759ac5e91a2393d7bc40a94f859e84 Signed-off-by: Carsten Pfeiffer <carsten.pfeiffer@gebit.de>