summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* | [performance] Remove synthetic access$ methods in dfs, diff and mergeAndrey Loskutov2015-10-285-17/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Java compiler must generate synthetic access methods for private methods and fields of the enclosing class if they are accessed from inner classes and vice versa. While invisible in the code, those synthetic access methods exist in the bytecode and seem to produce some extra execution overhead at runtime (compared with the direct access to this fields or methods), see https://git.eclipse.org/r/58948/. By removing the "private" access modifier from affected methods and fields we help compiler to avoid generation of synthetic access methods and hope to improve execution performance. To validate changes, one can either use javap or use Bytecode Outline plugin in Eclipse. In both cases one should look for "synthetic access$<number>" methods at the end of the class and inner class files in question - there should be none. NB: don't mix this "synthetic access$" methods up with "public synthetic bridge" methods generated to allow generic method override return types. Change-Id: I94fb481b68c84841c1db1a5ebe678b13e13c962b Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | [performance] Remove synthetic access$ methods in lib, util and dircacheAndrey Loskutov2015-10-288-23/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Java compiler must generate synthetic access methods for private methods and fields of the enclosing class if they are accessed from inner classes and vice versa. While invisible in the code, those synthetic access methods exist in the bytecode and seem to produce some extra execution overhead at runtime (compared with the direct access to this fields or methods), see https://git.eclipse.org/r/58948/. By removing the "private" access modifier from affected methods and fields we help compiler to avoid generation of synthetic access methods and hope to improve execution performance. To validate changes, one can either use javap or use Bytecode Outline plugin in Eclipse. In both cases one should look for "synthetic access$<number>" methods at the end of the class and inner class files in question - there should be none. NB: don't mix this "synthetic access$" methods up with "public synthetic bridge" methods generated to allow generic method override return types. Change-Id: Ie7b65f251ec4452d5a5ed48aa0f272cf49a9aecd Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | [performance] Remove synthetic access$ methods in transport packageAndrey Loskutov2015-10-2812-51/+51
|/ | | | | | | | | | | | | | | | | | | | | | | | | | Java compiler must generate synthetic access methods for private methods and fields of the enclosing class if they are accessed from inner classes and vice versa. While invisible in the code, those synthetic access methods exist in the bytecode and seem to produce some extra execution overhead at runtime (compared with the direct access to this fields or methods), see https://git.eclipse.org/r/58948/. By removing the "private" access modifier from affected methods and fields we help compiler to avoid generation of synthetic access methods and hope to improve execution performance. To validate changes, one can either use javap or use Bytecode Outline plugin in Eclipse. In both cases one should look for "synthetic access$<number>" methods at the end of the class and inner class files in question - there should be none. NB: don't mix this "synthetic access$" methods up with "public synthetic bridge" methods generated to allow generic method override return types. Change-Id: I0ebaeb2bc454cd8051b901addb102c1a6688688b Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* [performance] Remove synthetic access$ methods in pack and file packagesAndrey Loskutov2015-10-2813-51/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | Java compiler must generate synthetic access methods for private methods and fields of the enclosing class if they are accessed from inner classes and vice versa. While invisible in the code, those synthetic access methods exist in the bytecode and seem to produce some extra execution overhead at runtime (compared with the direct access to this fields or methods), see https://git.eclipse.org/r/58948/. By removing the "private" access modifier from affected methods and fields we help compiler to avoid generation of synthetic access methods and hope to improve execution performance. To validate changes, one can either use javap or use Bytecode Outline plugin in Eclipse. In both cases one should look for "synthetic access$<number>" methods at the end of the class and inner class files in question - there should be none. NB: don't mix this "synthetic access$" methods up with "public synthetic bridge" methods generated to allow generic method override return types. Change-Id: If53ec94145bae47b74e2561305afe6098012715c Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Add missing dependency to org.slf4j for org.eclipse.jgit.test bundleMatthias Sohn2015-10-241-1/+2
| | | | | | This OSGi dependency was missed in 6c424d32. Change-Id: I5bad895896194ad468c260d6c0810132a358f152 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Merge "WalkEncryptionTest: get rid of Log4J dependency"Matthias Sohn2015-10-231-2/+3
|\
| * WalkEncryptionTest: get rid of Log4J dependencyMarc Strapetz2015-10-211-2/+3
| | | | | | | | | | | | | | Instead use SLF4J as all other code does Change-Id: I0fee9c0aaa1d98f918f25aa11c2160d86399467e Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
* | Restore TestRepository.getClock(), it is used by Gerrit/GitilesTerry Parker2015-10-221-0/+11
| | | | | | | | | | Change-Id: I88880f18998e33377c0c684cbd8007b5d27d76e7 Signed-off-by: Terry Parker <tparker@google.com>
* | Add best-effort variant of File.getCanonicalFile()Thomas Wolf2015-10-221-0/+25
| | | | | | | | | | | | See https://git.eclipse.org/r/#/c/58405/. Change-Id: I097c4b1369754f59137eb8848a680c61b06510ad Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Expose bitmap selection parameters via PackConfigTerry Parker2015-10-214-16/+419
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Expose the following bitmap selection parameters via PackConfig: "bitmapContiguousCommitCount", "bitmapRecentCommitCount", "bitmapRecentCommitSpan", "bitmapDistantCommitSpan", "bitmapExcessiveBranchCount", and "bitmapInactiveBranchAge". The value of bitmapContiguousCommitCount, whereby bitmaps are created for the most recent N commits in a branch, has never been verified. If experiments show that they are not valuable, then we can simplify the implementation so that there is only a concept of recent and distant commit history (defined by "bitmapRecentCommitCount"), and the only controls we need are "bitmapRecentCommitSpan" and "bitmapDistantCommitSpan". Change-Id: I288bf3f97d6fbfdfcd5dde2699eff433a7307fb9 Signed-off-by: Terry Parker <tparker@google.com>
* | Update bitmap selection throttling to fully span active branches.Terry Parker2015-10-215-211/+407
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace the “bitmapCommitRange” parameter that was recently introduced with two new parameters: “bitmapExcessiveBranchCount” and “bitmapInactiveBranchAgeInDays”. If the count of branches does not exceed “bitmapExcessiveBranchCount”, then the current algorithm is kept for all branches. If the branch count is excessive, then the commit time for the tip commit for each branch is used to determine if a branch is “inactive”. "Active" branches get full commit selection using the existing algorithm. "Inactive" branches get fewer bitmaps near the branch tips. Introduce a "contiguousCommitCount" parameter that always enforces that the N most recent commits in a branch are selected for bitmaps. The previous nextSelectionDistance() algorithm created anywhere from 1-100 contiguous bitmaps at branch tips. For example, consider a branch with commits numbering 0-300, with 0 being the most recent commit. If the most recent 200 commits are not merge commits and the 200th commit was the last one selected, nextSelectionDistance() returned 100, causing commits 200-101 to be ignored. Then a window of size 100 was evaluated, searching for merge commits. Since no merge commits are found, the next commit (commit 0) was selected, for a total of 1 commit in the topmost 100 commits. If instead the 250th commit was selected, then by the same logic commit 50 is selected. At that point nextSelectionDistance() switches to selecting consecutive commits, so commits 0-50 in the topmost 100 commits are selected. The "contiguousCommitCount" parameter provides more determinism by always selecting a constant number or topmost commits. Add an optimization to break out of the inner loop of selectCommits() if all of the commits for the current branch have already been found. When reusing bitmaps from an existing pack, remove unnecessary populating and clearing of the writeBitmaps/PackBitmapIndexBuilder. Add comments to PackWriterBitmapPreparer, rename methods and variables for readability. Add tests for bitmap selection with and without merge commits and with excessive branch pruning triggered. Note: I will follow up with an additional change that exposes the new parameters through PackConfig. Change-Id: I5ccbb96c8849f331c302d9f7840e05f9650c4608 Signed-off-by: Terry Parker <tparker@google.com>
* Merge "Push control of time into MockSystemReader"Jonathan Nieder2015-10-206-31/+61
|\
| * Push control of time into MockSystemReaderTerry Parker2015-10-206-31/+61
| | | | | | | | | | | | | | | | | | | | | | LocalDiskRepositoryTestCase and TestRepository have competing ideas about time. Push them into MockSystemReader so they can cooperate. Rename getClock() methods that return Dates to getDate(). Change-Id: Ibbd9fe7f85d0064b0a19e3b675b9718a9e67c479 Signed-off-by: Terry Parker <tparker@google.com>
* | Silence Maven complaining about unset versions of reporting pluginsMatthias Sohn2015-10-181-0/+3
| | | | | | | | | | | | | | | | | | Since we use the reporting plugins only in the parent pom.xml there's no point in using the new pluginManagement tag in the reporting section which was introduced to fix https://issues.apache.org/jira/browse/MSITE-443 Change-Id: I750ca3765e95afb06609a362fb3354afc3b66b90 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Adding JGitV1 and JGitV2 Walk EncryptionAndrei Pozolotin2015-10-186-76/+694
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Building on top of https://git.eclipse.org/r/#/c/56391/ Here we preserve compatibility with JetS3t and add 2 new native JGit encryption implementations. For reference, see connection configuration files: * Version 0: jgit-s3-connection-v-0.properties * Version 1: jgit-s3-connection-v-1.properties * Version 2: jgit-s3-connection-v-2.properties Change-Id: I713290bcacbe92d88e5ef28ce137de73dd1abe2f Signed-off-by: Andrei Pozolotin <andrei.pozolotin@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Adding AES Walk Encryption support in http://www.jets3t.org/ modeAndrei Pozolotin2015-10-1814-66/+1388
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See previous attempt: https://git.eclipse.org/r/#/c/16674/ Here we preserve as much of JetS3t mode as possible while allowing to use new Java 8+ PBE algorithms such as PBEWithHmacSHA512AndAES_256 Summary of changes: * change pom.xml to control long tests * add WalkEncryptionTest.launch to run long tests * add AmazonS3.Keys to to normalize use of constants * change WalkEncryption to support AES in JetS3t mode * add WalkEncryptionTest to test remote encryption pipeline * add support for CI configuration for live Amazon S3 testing * add log4j based logging for tests in both Eclipse and Maven build To test locally, check out the review branch, then: * create amazon test configuration file * located your home dir: ${user.home} * named jgit-s3-config.properties * file format follows AmazonS3 connection settings file: accesskey = your-amazon-access-key secretkey = your-amazon-secret-key test.bucket = your-bucket-for-testing * finally: * run in Eclipse: WalkEncryptionTest.launch * or * run in Shell: mvn test --define test=WalkEncryptionTest Change-Id: I6f455fd9fb4eac261ca73d0bec6a4e7dae9f2e91 Signed-off-by: Andrei Pozolotin <andrei.pozolotin@gmail.com>
* | Test stability: add fsTick() to avoid random testPruneNone() failuresAndrey Loskutov2015-10-131-0/+1
|/ | | | | | | | At least on Windows the test failed each second time on the last assert. Adding a small timeout before gc.prune() makes the test stable again. Change-Id: I23d98dd565912c58dcf2f24f3ebc24824670cff3 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Fixed jgit test failures on WindowsAndrey Loskutov2015-10-123-18/+34
| | | | | | | | | | RepoCommandTest was failing because of open file handle left. IgnoreNodeTest was failing because of problems with creation of files with trailing spaces on Windows. HookTest was failing because of wrong line delimiter. Change-Id: I34f074ac447eb4c3ada8b250309bb568b426189d Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Merge "Don't call reader.close() 2 times on dispose()"Matthias Sohn2015-10-101-1/+0
|\
| * Don't call reader.close() 2 times on dispose()Andrey Loskutov2015-10-101-1/+0
| | | | | | | | | | | | Bug: 479406 Change-Id: I6645a8f36ea349a5f04fd14d2c1ef2ecac2bcc37 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | Merge "Limit the range of commits for which bitmaps are created."Shawn Pearce2015-10-109-11/+159
|\ \ | |/ |/|
| * Limit the range of commits for which bitmaps are created.Terry Parker2015-10-089-11/+159
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A bitmap index contains bitmaps for a set of commits in a pack file. Creating a bitmap for every commit is too expensive, so heuristics select the most "important" commits. The most recent commits are the most valuable. To clone a repository only those for the branch tips are needed. When fetching, only commits since the last fetch are needed. The commit selection heuristics generally work, but for some repositories the number of selected commits is prohibitively high. One example is the MSM 3.10 Linux kernel. With over 1 million commits on 2820 branches, the current heuristics resulted in +36k selected commits. Each uncompressed bitmap for that repository is ~413k, making it difficult to complete a GC operation in available memory. The benefit of creating bitmaps over the entire history of a repository like the MSM 3.10 Linux kernel isn't clear. For that repository, most history for the last year appears to be in the last 100k commits. Limiting bitmap commit selection to just those commits reduces the count of selected commits from ~36k to ~10.5k. Dropping bitmaps for older commits does not affect object counting times for clones or for fetches on clients that are reasonably up-to-date. This patch defines a new "bitmapCommitRange" PackConfig parameter to limit the commit selection process when building bitmaps. The range starts with the most recent commit and walks backwards. A range of 10k considers only the 10000 most recent commits. A range of zero creates bitmaps only for branch tips. A range of -1 (the default) does not limit the range--all commits in the pack are used in the commit selection process. Change-Id: Ied92c70cfa0778facc670e0f14a0980bed5e3bfb Signed-off-by: Terry Parker <tparker@google.com>
* | Delete non empty directories before checkout a pathAndrey Loskutov2015-10-098-8/+477
| | | | | | | | | | | | | | | | | | | | If the checkout path is currently a non-empty directory (and was a link or a regular file before), this directory will be removed before performing checkout, but only if the checkout path is specified. Bug: 474973 Change-Id: Ifc6c61592d9b54d26c66367163acdebea369145c Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | Add utility method allowing to check for empty folders in workdirChristian Halstrick2015-10-081-3/+21
|/ | | | | | | | | Previously the method DirCacheCheckoutTest#assertWorkDir() silently skipped over empty folders. If tests would have left unexpected empty folders in the worktree this would be overlooked. Now empty folders have to be specified by something like mkmap("<foldername>", "/", ...] Change-Id: Idb8b270e92daf02ecdc381d148a5958bd83ec057 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Align docstring for RepoCommand.setRecordRemoteBranch with argumentStefan Beller2015-10-061-3/+3
| | | | | Change-Id: Ia3aa1130795d162e482b4088f190956d70857244 Signed-off-by: Stefan Beller <sbeller@google.com>
* Merge "RepoCommand: Add setRecordRemoteBranch option to record upstream branch"Jonathan Nieder2015-10-054-2/+81
|\
| * RepoCommand: Add setRecordRemoteBranch option to record upstream branchStefan Beller2015-10-054-2/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On a server also running Gerrit that is using RepoCommand to convert from an XML manifest to a git submodule superproject periodically, it would be handy to be able to use Gerrit's submodule subscription feature[1] to update the superproject automatically between RepoCommand runs as changes are merged in each subprojects. This requires setting the 'branch' field for each submodule so that Gerrit knows what branch to watch. Add an option to do that. Setting the branch field also is useful for plain Git users, since it allows them to use "git submodule update --remote" to manually update all submodules between RepoCommand runs. [1] https://gerrit-review.googlesource.com/Documentation/user-submodules.html Change-Id: I1a10861bcd0df3b3673fc2d481c8129b2bdac5f9 Signed-off-by: Stefan Beller <sbeller@google.com>
* | Compare API against 4.1.0.201509280440-rMatthias Sohn2015-10-031-1/+1
| | | | | | | | | | Change-Id: Ia04d09ca337c357004567a54a9fc01ea1e55e508 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Merge "[ignore rules] fix for handling unmatched '[' brackets"Matthias Sohn2015-10-023-4/+56
|\ \
| * | [ignore rules] fix for handling unmatched '[' bracketsAndrey Loskutov2015-09-303-4/+56
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes JGit parsing of ignore rules containing unmatched '[' bracket compatible to the Git CLI. Since '[' starts character group, Git tries to parse the ignore rule as a shell glob pattern and if the character group is not closed, the glob pattern is invalid and so the ignore rule never matches anything. See also http://article.gmane.org/gmane.comp.version-control.git/278699. Bug: 478490 Change-Id: I734a4d14fcdd721070e3f75d57e33c2c0700d503 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* | Merge branch 'stable-4.1'Matthias Sohn2015-10-0224-305/+332
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stable-4.1: pgm: Open RevWalk and TreeWalk in try-with-resource ant: Open Repository and Git in try-with-resource pgm: Create instances of Git in try-with-resource FanoutBucket: Create ObjectInserter.Formatter in try-with-resource Fix compiler warnings in DiffFormatter.writeGitLinkText Change-Id: I448ecc9a1334977d9f304dd61ea20c7a8e692b10 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * | pgm: Open RevWalk and TreeWalk in try-with-resourceDavid Pursehouse2015-10-018-79/+87
| | | | | | | | | | | | | | | | | | | | | To prevent potential resource leaks. Change-Id: I2039af04d9fb75405f8e13abf508623b7d4ef324 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
| * | ant: Open Repository and Git in try-with-resourceDavid Pursehouse2015-10-012-8/+8
| | | | | | | | | | | | | | | | | | | | | To prevent potential resource leak. Change-Id: I3f4af9037c9d26ec575b529ab66066365ab918a5 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
| * | pgm: Create instances of Git in try-with-resourceDavid Pursehouse2015-10-0114-215/+235
| | | | | | | | | | | | | | | | | | | | | To prevent potential resource leak. Change-Id: I8ac4ae61193324849bafb46501a55f93c5029a4e Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
| * | FanoutBucket: Create ObjectInserter.Formatter in try-with-resourceDavid Pursehouse2015-10-011-2/+2
| | | | | | | | | | | | | | | | | | | | | To prevent potential resource leak. Change-Id: Ife09be2822bc476199f10da8d1eb7ccc8da05b79 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
| * | Fix compiler warnings in DiffFormatter.writeGitLinkTextDavid Pursehouse2015-09-301-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Remove declaration of IOException that is no longer thrown - Add missing //$NON-NLS-1$ to prevent "Non-externalized string literal" warning. These warnings seem to have been introduced by If13f7b406. Change-Id: I30058eed31b92067a6ab22e787732b08e29f8d63 Signed-off-by: David Pursehouse <david.pursehouse@sonymobile.com>
* | | Use japicmp instead of clirr to detect API changesMatthias Sohn2015-10-016-65/+410
| |/ |/| | | | | | | | | | | Clirr doesn't support Java 8 hence use japicmp instead. See https://github.com/siom79/japicmp Change-Id: If4b30a6d6aa849b4d6b3b0c900558c609822840c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Add test case comparing CGit vs JGit ignore behavior for random patternsSébastien Arod2015-09-301-0/+275
| | | | | | | | | | | | | | | | This test case was developed in the scope of bug 478065. Bug: 478065 Change-Id: Ibcce1ed375d4a6ba05461e6c6b287d16752fa681 Signed-off-by: Sébastien Arod <sebastien.arod@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Prepare 4.2.0-SNAPSHOT buildsMatthias Sohn2015-09-2846-249/+249
| | | | | | | | | | Change-Id: If559d3565b1f84c93a533e1ce18d5293605d1950 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Merge branch 'stable-4.1'Matthias Sohn2015-09-2846-248/+248
|\| | | | | | | | | | | | | | | | | * stable-4.1: Prepare 4.1.1-SNAPSHOT builds JGit v4.1.0.201509280440-r Change-Id: Ie898f10c39f32419628f2b6dff7e3ec083ddfdfe Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * Prepare 4.1.1-SNAPSHOT buildsMatthias Sohn2015-09-2846-248/+248
| | | | | | | | | | Change-Id: I035f3a8d0f0de86e8b8f00e668be5ce008402e82 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
| * JGit v4.1.0.201509280440-rv4.1.0.201509280440-rMatthias Sohn2015-09-2846-49/+49
|/ | | | | Change-Id: I9a536870b9f5c1247c52d6c976a954115982fa1c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Use java.nio.file consistently in FSMatthias Sohn2015-09-276-152/+9
| | | | | | | | | | | | | | | | Since 4.0 we require Java 7 so there is no longer a need to override the following methods in FS_POSIX, FS_Win32, FS_Win32_Cygwin - lastModified() - setLastModified() - length() - isSymlink() - exists() - isDirectory() - isFile() - isHidden() Hence implement these methods in FS and remove overrides in subclasses. Change-Id: I5dbde6ec806c66c86ac542978918361461021294 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Deprecate FileUtil and move the code to FileUtilsAndrey Loskutov2015-09-275-132/+285
| | | | | | | | | | | | | | As discussed on https://git.eclipse.org/r/53836 it does not make sense to have two similar utility classes in same package with intersecting functionality. To not break the API, all methods from FileUtil are copied to FileUtils, all FileUtil API is made deprecated and redirecting now to FileUtils. Moved simple methods which are available in Java 7 API are made package private and can be removed at any point later entirely (right now they are in use). Bug: 475070 Change-Id: Idffcf9840496c448173af7c052d8898ada68e27b Signed-off-by: Andrey Loskutov <loskutov@gmx.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [performance] Cache platform name in SystemReaderAndrey Loskutov2015-09-272-14/+44
| | | | | | | | | SystemReader.isMacOs() and SystemReader.isWindows() return values are unlikely to change during the JVM lifetime (except tests). Don't read system properties each time the methods are called, just use previously calculated value. Change-Id: I495521f67a8b544e7b7247d99bbd05a42ea16d20 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* [ignore rules] fix for backslash handlingAndrey Loskutov2015-09-267-17/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An attempt to re-implement not well documented Git CLI behavior for patterns with backslashes. It looks like Git silently ignores all \ characters in ignore rules, if they are NOT covered by 3 cases described in [1]: {quote} 1) ... Put a backslash ("\") in front of the first hash for patterns that begin with a hash. ... 2) Trailing spaces are ignored unless they are quoted with backslash ("\"). ... 3) Put a backslash ("\") in front of the first "!" for patterns that begin with a literal "!", for example, "\!important!.txt". {quote} Undocumented also is the fact that backslash itself can be escaped by backslash. So \h\e\l\l\o\.t\x\t rule matches hello.txt and a\\\\b a\b in Git CLI. Additionally, the glob parser [2] knows special meaning of backslash: {quote} One can remove the special meaning of '?', '*' and '[' by preceding them by a backslash, or, in case this is part of a shell command line, enclosing them in quotes. Between brackets these characters stand for themselves. Thus, "[[?*\]" matches the four characters '[', '?', '*' and '\'. {quote} [1] https://www.kernel.org/pub/software/scm/git/docs/gitignore.html [2] http://man7.org/linux/man-pages/man7/glob.7.html Bug: 478065 Change-Id: I3dc973475d1943c5622103701fa8cb3ea0684e3e Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* [ignore rules] Fix for character group matcherAndrey Loskutov2015-09-262-1/+2
| | | | | | | | | | Currently we fail to properly recognize character group if the pattern before character group contains opening bracket. See comment from Sebastien Arod on https://git.eclipse.org/r/56678/ Change-Id: I70d3657a2a328818ea2bdc1409d18ecb3a85825b Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
* Merge "Show submodule difference as a hunk"Matthias Sohn2015-09-252-22/+16
|\
| * Show submodule difference as a hunkJacob Keller2015-09-242-22/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current DiffFormat behavior regarding submodules (aka git links) is incorrect. The "Subproject commit <sha1>" appears as part of the diff header, rather than as its own hunk. --> From JGit implementation diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin index b9d3ca8..ec6ed89 160000 --- a/plugins/cookbook-plugin +++ b/plugins/cookbook-plugin -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e --> From C Git 2.5.2 diff --git a/plugins/cookbook-plugin b/plugins/cookbook-plugin index b9d3ca8..ec6ed89 160000 --- a/plugins/cookbook-plugin +++ b/plugins/cookbook-plugin @@ -1 +1 @@ -Subproject commit b9d3ca8a65030071e28be19296ba867ab424fbbf +Subproject commit ec6ed89c47ba7223f82d9cb512926a6c5081343e The current way of processing submodules results in no hunk header and includes the contents of the hunk as part of the headers. To fix this, we can't just have our writeGitLinkDiffText output the hunk header. We have to change the flow so that the raw text gets parsed as a diff. The easiest way to do this is to fake the RawText in the FormatResult when we have a GITLINK. It should be noted that it seems possible for there to be a difference between a GITLINK and a non-GITLINK, but I don't think this can happen in practice, so I don't think we need to worry too much about it. This patch also fixes up the test for GitLink headers, as the test was for the old behavior. My setup has 3 other failing tests which may or may not be the result of environmental changes. However, the same tests fail without this commit, so I do not believe they are related. Bug: 477759 Change-Id: If13f7b406904fad814416c93ed09ea47ef183337 Signed-off-by: Jacob Keller <jacob.keller@gmail.com>
* | Properly support special regex characters in ignore rulesAndrey Loskutov2015-09-242-1/+93
| | | | | | | | | | | | | | | | | | | | Ignore rules should escape $^(){}+| chars if using regular expressions, because they should be treated literally if they aren't part of a character group. Bug: 478055 Change-Id: Ic7276442d7f8f02594b85eae1ef697362e62d3bd Signed-off-by: Andrey Loskutov <loskutov@gmx.de>