You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ConfigConstants.java 17KB

DFS: A storage layer for JGit In practice the DHT storage layer has not been performing as well as large scale server environments want to see from a Git server. The performance of the DHT schema degrades rapidly as small changes are pushed into the repository due to the chunk size being less than 1/3 of the pushed pack size. Small chunks cause poor prefetch performance during reading, and require significantly longer prefetch lists inside of the chunk meta field to work around the small size. The DHT code is very complex (>17,000 lines of code) and is very sensitive to the underlying database round-trip time, as well as the way objects were written into the pack stream that was chunked and stored on the database. A poor pack layout (from any version of C Git prior to Junio reworking it) can cause the DHT code to be unable to enumerate the objects of the linux-2.6 repository in a completable time scale. Performing a clone from a DHT stored repository of 2 million objects takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row for each object being cloned. This is very difficult for some DHTs to scale, even at 5000 rows/second the lookup stage alone takes 6 minutes (on local filesystem, this is almost too fast to bother measuring). Some servers like Apache Cassandra just fall over and cannot complete the 2 million lookups in rapid fire. On a ~400 MiB repository, the DHT schema has an extra 25 MiB of redundant data that gets downloaded to the JGit process, and that is before you consider the cost of the OBJECT_INDEX table also being fully loaded, which is at least 223 MiB of data for the linux kernel repository. In the DHT schema answering a `git clone` of the ~400 MiB linux kernel needs to load 248 MiB of "index" data from the DHT, in addition to the ~400 MiB of pack data that gets sent to the client. This is 193 MiB more data to be accessed than the native filesystem format, but it needs to come over a much smaller pipe (local Ethernet typically) than the local SATA disk drive. I also never got around to writing the "repack" support for the DHT schema, as it turns out to be fairly complex to safely repack data in the repository while also trying to minimize the amount of changes made to the database, due to very common limitations on database mutation rates.. This new DFS storage layer fixes a lot of those issues by taking the simple approach for storing relatively standard Git pack and index files on an abstract filesystem. Packs are accessed by an in-process buffer cache, similar to the WindowCache used by the local filesystem storage layer. Unlike the local file IO, there are some assumptions that the storage system has relatively high latency and no concept of "file handles". Instead it looks at the file more like HTTP byte range requests, where a read channel is a simply a thunk to trigger a read request over the network. The DFS code in this change is still abstract, it does not store on any particular filesystem, but is fairly well suited to the Amazon S3 or Apache Hadoop HDFS. Storing packs directly on HDFS rather than HBase removes a layer of abstraction, as most HBase row reads turn into an HDFS read. Most of the DFS code in this change was blatently copied from the local filesystem code. Most parts should be refactored to be shared between the two storage systems, but right now I am hesistent to do this due to how well tuned the local filesystem code currently is. Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb
13 years ago
DFS: A storage layer for JGit In practice the DHT storage layer has not been performing as well as large scale server environments want to see from a Git server. The performance of the DHT schema degrades rapidly as small changes are pushed into the repository due to the chunk size being less than 1/3 of the pushed pack size. Small chunks cause poor prefetch performance during reading, and require significantly longer prefetch lists inside of the chunk meta field to work around the small size. The DHT code is very complex (>17,000 lines of code) and is very sensitive to the underlying database round-trip time, as well as the way objects were written into the pack stream that was chunked and stored on the database. A poor pack layout (from any version of C Git prior to Junio reworking it) can cause the DHT code to be unable to enumerate the objects of the linux-2.6 repository in a completable time scale. Performing a clone from a DHT stored repository of 2 million objects takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row for each object being cloned. This is very difficult for some DHTs to scale, even at 5000 rows/second the lookup stage alone takes 6 minutes (on local filesystem, this is almost too fast to bother measuring). Some servers like Apache Cassandra just fall over and cannot complete the 2 million lookups in rapid fire. On a ~400 MiB repository, the DHT schema has an extra 25 MiB of redundant data that gets downloaded to the JGit process, and that is before you consider the cost of the OBJECT_INDEX table also being fully loaded, which is at least 223 MiB of data for the linux kernel repository. In the DHT schema answering a `git clone` of the ~400 MiB linux kernel needs to load 248 MiB of "index" data from the DHT, in addition to the ~400 MiB of pack data that gets sent to the client. This is 193 MiB more data to be accessed than the native filesystem format, but it needs to come over a much smaller pipe (local Ethernet typically) than the local SATA disk drive. I also never got around to writing the "repack" support for the DHT schema, as it turns out to be fairly complex to safely repack data in the repository while also trying to minimize the amount of changes made to the database, due to very common limitations on database mutation rates.. This new DFS storage layer fixes a lot of those issues by taking the simple approach for storing relatively standard Git pack and index files on an abstract filesystem. Packs are accessed by an in-process buffer cache, similar to the WindowCache used by the local filesystem storage layer. Unlike the local file IO, there are some assumptions that the storage system has relatively high latency and no concept of "file handles". Instead it looks at the file more like HTTP byte range requests, where a read channel is a simply a thunk to trigger a read request over the network. The DFS code in this change is still abstract, it does not store on any particular filesystem, but is fairly well suited to the Amazon S3 or Apache Hadoop HDFS. Storing packs directly on HDFS rather than HBase removes a layer of abstraction, as most HBase row reads turn into an HDFS read. Most of the DFS code in this change was blatently copied from the local filesystem code. Most parts should be refactored to be shared between the two storage systems, but right now I am hesistent to do this due to how well tuned the local filesystem code currently is. Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb
13 years ago
DFS: A storage layer for JGit In practice the DHT storage layer has not been performing as well as large scale server environments want to see from a Git server. The performance of the DHT schema degrades rapidly as small changes are pushed into the repository due to the chunk size being less than 1/3 of the pushed pack size. Small chunks cause poor prefetch performance during reading, and require significantly longer prefetch lists inside of the chunk meta field to work around the small size. The DHT code is very complex (>17,000 lines of code) and is very sensitive to the underlying database round-trip time, as well as the way objects were written into the pack stream that was chunked and stored on the database. A poor pack layout (from any version of C Git prior to Junio reworking it) can cause the DHT code to be unable to enumerate the objects of the linux-2.6 repository in a completable time scale. Performing a clone from a DHT stored repository of 2 million objects takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row for each object being cloned. This is very difficult for some DHTs to scale, even at 5000 rows/second the lookup stage alone takes 6 minutes (on local filesystem, this is almost too fast to bother measuring). Some servers like Apache Cassandra just fall over and cannot complete the 2 million lookups in rapid fire. On a ~400 MiB repository, the DHT schema has an extra 25 MiB of redundant data that gets downloaded to the JGit process, and that is before you consider the cost of the OBJECT_INDEX table also being fully loaded, which is at least 223 MiB of data for the linux kernel repository. In the DHT schema answering a `git clone` of the ~400 MiB linux kernel needs to load 248 MiB of "index" data from the DHT, in addition to the ~400 MiB of pack data that gets sent to the client. This is 193 MiB more data to be accessed than the native filesystem format, but it needs to come over a much smaller pipe (local Ethernet typically) than the local SATA disk drive. I also never got around to writing the "repack" support for the DHT schema, as it turns out to be fairly complex to safely repack data in the repository while also trying to minimize the amount of changes made to the database, due to very common limitations on database mutation rates.. This new DFS storage layer fixes a lot of those issues by taking the simple approach for storing relatively standard Git pack and index files on an abstract filesystem. Packs are accessed by an in-process buffer cache, similar to the WindowCache used by the local filesystem storage layer. Unlike the local file IO, there are some assumptions that the storage system has relatively high latency and no concept of "file handles". Instead it looks at the file more like HTTP byte range requests, where a read channel is a simply a thunk to trigger a read request over the network. The DFS code in this change is still abstract, it does not store on any particular filesystem, but is fairly well suited to the Amazon S3 or Apache Hadoop HDFS. Storing packs directly on HDFS rather than HBase removes a layer of abstraction, as most HBase row reads turn into an HDFS read. Most of the DFS code in this change was blatently copied from the local filesystem code. Most parts should be refactored to be shared between the two storage systems, but right now I am hesistent to do this due to how well tuned the local filesystem code currently is. Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb
13 years ago
DFS: A storage layer for JGit In practice the DHT storage layer has not been performing as well as large scale server environments want to see from a Git server. The performance of the DHT schema degrades rapidly as small changes are pushed into the repository due to the chunk size being less than 1/3 of the pushed pack size. Small chunks cause poor prefetch performance during reading, and require significantly longer prefetch lists inside of the chunk meta field to work around the small size. The DHT code is very complex (>17,000 lines of code) and is very sensitive to the underlying database round-trip time, as well as the way objects were written into the pack stream that was chunked and stored on the database. A poor pack layout (from any version of C Git prior to Junio reworking it) can cause the DHT code to be unable to enumerate the objects of the linux-2.6 repository in a completable time scale. Performing a clone from a DHT stored repository of 2 million objects takes 2 million row lookups in the DHT to locate the OBJECT_INDEX row for each object being cloned. This is very difficult for some DHTs to scale, even at 5000 rows/second the lookup stage alone takes 6 minutes (on local filesystem, this is almost too fast to bother measuring). Some servers like Apache Cassandra just fall over and cannot complete the 2 million lookups in rapid fire. On a ~400 MiB repository, the DHT schema has an extra 25 MiB of redundant data that gets downloaded to the JGit process, and that is before you consider the cost of the OBJECT_INDEX table also being fully loaded, which is at least 223 MiB of data for the linux kernel repository. In the DHT schema answering a `git clone` of the ~400 MiB linux kernel needs to load 248 MiB of "index" data from the DHT, in addition to the ~400 MiB of pack data that gets sent to the client. This is 193 MiB more data to be accessed than the native filesystem format, but it needs to come over a much smaller pipe (local Ethernet typically) than the local SATA disk drive. I also never got around to writing the "repack" support for the DHT schema, as it turns out to be fairly complex to safely repack data in the repository while also trying to minimize the amount of changes made to the database, due to very common limitations on database mutation rates.. This new DFS storage layer fixes a lot of those issues by taking the simple approach for storing relatively standard Git pack and index files on an abstract filesystem. Packs are accessed by an in-process buffer cache, similar to the WindowCache used by the local filesystem storage layer. Unlike the local file IO, there are some assumptions that the storage system has relatively high latency and no concept of "file handles". Instead it looks at the file more like HTTP byte range requests, where a read channel is a simply a thunk to trigger a read request over the network. The DFS code in this change is still abstract, it does not store on any particular filesystem, but is fairly well suited to the Amazon S3 or Apache Hadoop HDFS. Storing packs directly on HDFS rather than HBase removes a layer of abstraction, as most HBase row reads turn into an HDFS read. Most of the DFS code in this change was blatently copied from the local filesystem code. Most parts should be refactored to be shared between the two storage systems, but right now I am hesistent to do this due to how well tuned the local filesystem code currently is. Change-Id: Iec524abdf172e9ec5485d6c88ca6512cd8a6eafb
13 years ago
Merge branch 'stable-5.1' into stable-5.2 * stable-5.1: Fix OpenSshConfigTest#config FileSnapshot: fix bug with timestamp thresholding In LockFile#waitForStatChange wait in units of file time resolution Cache FileStoreAttributeCache per directory Fix FileSnapshot#save(long) and FileSnapshot#save(Instant) Persist minimal racy threshold and allow manual configuration Measure minimum racy interval to auto-configure FileSnapshot Reuse FileUtils to recursively delete files created by tests Fix FileAttributeCache.toString() Add test for racy git detection in FileSnapshot Repeat RefDirectoryTest.testGetRef_DiscoversModifiedLoose 100 times Fix org.eclipse.jdt.core.prefs of org.eclipse.jgit.junit Add missing javadoc in org.eclipse.jgit.junit Enhance RepeatRule to report number of failures at the end Fix FileSnapshotTests for filesystem with high timestamp resolution Retry deleting test files in FileBasedConfigTest Measure filesystem timestamp resolution already in test setup Refactor FileSnapshotTest to use NIO APIs Measure stored timestamp resolution instead of time to touch file Handle CancellationException in FileStoreAttributeCache Fix FileSnapshot#saveNoConfig Use Instant for smudge time in DirCache and DirCacheEntry Use Instant instead of milliseconds for filesystem timestamp handling Workaround SecurityException in FS#getFsTimestampResolution Fix NPE in FS$FileStoreAttributeCache.getFsTimestampResolution FS: ignore AccessDeniedException when measuring timestamp resolution Add debug trace for FileSnapshot Use FileChannel.open to touch file and set mtime to now Persist filesystem timestamp resolution and allow manual configuration Increase bazel timeout for long running tests Bazel: Fix lint warning flagged by buildifier Update bazlets to latest version Bazel: Add missing dependencies for ArchiveCommandTest Bazel: Remove FileTreeIteratorWithTimeControl from BUILD file Add support for nanoseconds and microseconds for Config#getTimeUnit Optionally measure filesystem timestamp resolution asynchronously Delete unused FileTreeIteratorWithTimeControl FileSnapshot#equals: consider UNKNOWN_SIZE Timeout measuring file timestamp resolution after 2 seconds Fix RacyGitTests#testRacyGitDetection Change RacyGitTests to create a racy git situation in a stable way Deprecate Constants.CHARACTER_ENCODING in favor of StandardCharsets.UTF_8 Fix non-deterministic hash of archives created by ArchiveCommand Update Maven plugins ecj, plexus, error-prone Update Maven plugins and cleanup Maven warnings Make inner classes static where possible Fix API problem filters Change-Id: Ia57385b2a60f48a5317c8d723721c235d7043a84 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
4 years ago
Persist filesystem timestamp resolution and allow manual configuration To enable persisting filesystem timestamp resolution per FileStore add a new config section to the user global git configuration: - Config section is "filesystem" - Config subsection is concatenation of - Java vendor (system property "java.vm.vendor") - runtime version (system property "java.vm.version") - FileStore's name - separated by '|' e.g. "AdoptOpenJDK|1.8.0_212-b03|/dev/disk1s1" The prefix is needed since some Java versions do not expose the full timestamp resolution of the underlying filesystem. This may also depend on the underlying operating system hence concrete key values may not be portable. - Config key for timestamp resolution is "timestampResolution" as a time value, supported time units are those supported by DefaultTypedConfigGetter#getTimeUnit If timestamp resolution is already configured for a given FileStore the configured value is used instead of measuring the resolution. When timestamp resolution was measured it is persisted in the user global git configuration. Example: [filesystem "AdoptOpenJDK|1.8.0_212-b03|/dev/disk1s1"] timestampResolution = 1 seconds If locking the git config file fails retry saving the resolution up to 5 times in order to workaround races with another thread. In order to avoid stack overflow use the fallback filesystem timestamp resolution when loading FileBasedConfig which creates itself a FileSnapshot to help checking if the config changed. Note: - on some OSes Java 8,9 truncate to milliseconds or seconds, see https://bugs.openjdk.java.net/browse/JDK-8177809, fixed in Java 10 - UnixFileAttributes up to Java 12 truncates timestamp resolution to microseconds when converting the internal representation to FileTime exposed in the API, see https://bugs.openjdk.java.net/browse/JDK-8181493 - WindowsFileAttributes also provides only microsecond resolution up to Java 12 Hence do not attempt to manually configure a higher timestamp resolution than supported by the Java version being used at runtime. Bug: 546891 Bug: 548188 Change-Id: Iff91b8f9e6e5e2295e1463f87c8e95edf4abbcf8 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
4 years ago
Persist minimal racy threshold and allow manual configuration To enable persisting the minimal racy threshold per FileStore add a new config option to the user global git configuration: - Config section is "filesystem" - Config subsection is concatenation of - Java vendor (system property "java.vendor") - Java version (system property "java.version") - FileStore's name, on Windows we use the attribute volume:vsn instead since the name is not necessarily unique. - separated by '|' e.g. "AdoptOpenJDK|1.8.0_212-b03|/dev/disk1s1" The same prefix is used as for filesystem timestamp resolution, so both values are stored in the same config section - The config key for minmal racy threshold is "minRacyThreshold" as a time value, supported time units are those supported by DefaultTypedConfigGetter#getTimeUnit - measure for 3 seconds to limit runtime which depends on hardware, OS and Java version being used If the minimal racy threshold is configured for a given FileStore the configured value is used instead of measuring it. When the minimal racy threshold was measured it is persisted in the user global git configuration. Rename FileStoreAttributeCache to FileStoreAttributes since this class is now declared public in order to enable exposing all attributes in one object. Example: [filesystem "AdoptOpenJDK|11.0.3|/dev/disk1s1"] timestampResolution = 7000 nanoseconds minRacyThreshold = 3440 microseconds Change-Id: I22195e488453aae8d011b0a8e3276fe3d99deaea Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Also-By: Marc Strapetz <marc.strapetz@syntevo.com>
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. /*
  2. * Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
  3. * Copyright (C) 2010, Chris Aniszczyk <caniszczyk@gmail.com>
  4. * Copyright (C) 2012, 2020, Robin Rosenberg and others
  5. *
  6. * This program and the accompanying materials are made available under the
  7. * terms of the Eclipse Distribution License v. 1.0 which is available at
  8. * https://www.eclipse.org/org/documents/edl-v10.php.
  9. *
  10. * SPDX-License-Identifier: BSD-3-Clause
  11. */
  12. package org.eclipse.jgit.lib;
  13. /**
  14. * Constants for use with the Configuration classes: section names,
  15. * configuration keys
  16. */
  17. @SuppressWarnings("nls")
  18. public final class ConfigConstants {
  19. /** The "core" section */
  20. public static final String CONFIG_CORE_SECTION = "core";
  21. /** The "branch" section */
  22. public static final String CONFIG_BRANCH_SECTION = "branch";
  23. /** The "remote" section */
  24. public static final String CONFIG_REMOTE_SECTION = "remote";
  25. /** The "diff" section */
  26. public static final String CONFIG_DIFF_SECTION = "diff";
  27. /** The "dfs" section */
  28. public static final String CONFIG_DFS_SECTION = "dfs";
  29. /**
  30. * The "receive" section
  31. * @since 4.6
  32. */
  33. public static final String CONFIG_RECEIVE_SECTION = "receive";
  34. /** The "user" section */
  35. public static final String CONFIG_USER_SECTION = "user";
  36. /** The "gerrit" section */
  37. public static final String CONFIG_GERRIT_SECTION = "gerrit";
  38. /** The "workflow" section */
  39. public static final String CONFIG_WORKFLOW_SECTION = "workflow";
  40. /** The "submodule" section */
  41. public static final String CONFIG_SUBMODULE_SECTION = "submodule";
  42. /**
  43. * The "rebase" section
  44. * @since 3.2
  45. */
  46. public static final String CONFIG_REBASE_SECTION = "rebase";
  47. /** The "gc" section */
  48. public static final String CONFIG_GC_SECTION = "gc";
  49. /** The "pack" section */
  50. public static final String CONFIG_PACK_SECTION = "pack";
  51. /**
  52. * The "fetch" section
  53. * @since 3.3
  54. */
  55. public static final String CONFIG_FETCH_SECTION = "fetch";
  56. /**
  57. * The "pull" section
  58. * @since 3.5
  59. */
  60. public static final String CONFIG_PULL_SECTION = "pull";
  61. /**
  62. * The "merge" section
  63. * @since 4.9
  64. */
  65. public static final String CONFIG_MERGE_SECTION = "merge";
  66. /**
  67. * The "filter" section
  68. * @since 4.6
  69. */
  70. public static final String CONFIG_FILTER_SECTION = "filter";
  71. /**
  72. * The "gpg" section
  73. * @since 5.2
  74. */
  75. public static final String CONFIG_GPG_SECTION = "gpg";
  76. /**
  77. * The "protocol" section
  78. * @since 5.9
  79. */
  80. public static final String CONFIG_PROTOCOL_SECTION = "protocol";
  81. /**
  82. * The "format" key
  83. * @since 5.2
  84. */
  85. public static final String CONFIG_KEY_FORMAT = "format";
  86. /**
  87. * The "program" key
  88. *
  89. * @since 5.11
  90. */
  91. public static final String CONFIG_KEY_PROGRAM = "program";
  92. /**
  93. * The "signingKey" key
  94. *
  95. * @since 5.2
  96. */
  97. public static final String CONFIG_KEY_SIGNINGKEY = "signingKey";
  98. /**
  99. * The "commit" section
  100. * @since 5.2
  101. */
  102. public static final String CONFIG_COMMIT_SECTION = "commit";
  103. /**
  104. * The "tag" section
  105. *
  106. * @since 5.11
  107. */
  108. public static final String CONFIG_TAG_SECTION = "tag";
  109. /**
  110. * The "gpgSign" key
  111. *
  112. * @since 5.2
  113. */
  114. public static final String CONFIG_KEY_GPGSIGN = "gpgSign";
  115. /**
  116. * The "forceSignAnnotated" key
  117. *
  118. * @since 5.11
  119. */
  120. public static final String CONFIG_KEY_FORCE_SIGN_ANNOTATED = "forceSignAnnotated";
  121. /**
  122. * The "hooksPath" key.
  123. *
  124. * @since 5.6
  125. */
  126. public static final String CONFIG_KEY_HOOKS_PATH = "hooksPath";
  127. /**
  128. * The "quotePath" key.
  129. * @since 5.6
  130. */
  131. public static final String CONFIG_KEY_QUOTE_PATH = "quotePath";
  132. /** The "algorithm" key */
  133. public static final String CONFIG_KEY_ALGORITHM = "algorithm";
  134. /** The "autocrlf" key */
  135. public static final String CONFIG_KEY_AUTOCRLF = "autocrlf";
  136. /**
  137. * The "auto" key
  138. * @since 4.6
  139. */
  140. public static final String CONFIG_KEY_AUTO = "auto";
  141. /**
  142. * The "autogc" key
  143. * @since 4.6
  144. */
  145. public static final String CONFIG_KEY_AUTOGC = "autogc";
  146. /**
  147. * The "autopacklimit" key
  148. * @since 4.6
  149. */
  150. public static final String CONFIG_KEY_AUTOPACKLIMIT = "autopacklimit";
  151. /**
  152. * The "eol" key
  153. *
  154. * @since 4.3
  155. */
  156. public static final String CONFIG_KEY_EOL = "eol";
  157. /** The "bare" key */
  158. public static final String CONFIG_KEY_BARE = "bare";
  159. /** The "excludesfile" key */
  160. public static final String CONFIG_KEY_EXCLUDESFILE = "excludesfile";
  161. /**
  162. * The "attributesfile" key
  163. *
  164. * @since 3.7
  165. */
  166. public static final String CONFIG_KEY_ATTRIBUTESFILE = "attributesfile";
  167. /** The "filemode" key */
  168. public static final String CONFIG_KEY_FILEMODE = "filemode";
  169. /** The "logallrefupdates" key */
  170. public static final String CONFIG_KEY_LOGALLREFUPDATES = "logallrefupdates";
  171. /** The "repositoryformatversion" key */
  172. public static final String CONFIG_KEY_REPO_FORMAT_VERSION = "repositoryformatversion";
  173. /** The "worktree" key */
  174. public static final String CONFIG_KEY_WORKTREE = "worktree";
  175. /** The "blockLimit" key */
  176. public static final String CONFIG_KEY_BLOCK_LIMIT = "blockLimit";
  177. /** The "blockSize" key */
  178. public static final String CONFIG_KEY_BLOCK_SIZE = "blockSize";
  179. /**
  180. * The "concurrencyLevel" key
  181. *
  182. * @since 4.6
  183. */
  184. public static final String CONFIG_KEY_CONCURRENCY_LEVEL = "concurrencyLevel";
  185. /** The "deltaBaseCacheLimit" key */
  186. public static final String CONFIG_KEY_DELTA_BASE_CACHE_LIMIT = "deltaBaseCacheLimit";
  187. /**
  188. * The "symlinks" key
  189. * @since 3.3
  190. */
  191. public static final String CONFIG_KEY_SYMLINKS = "symlinks";
  192. /** The "streamFileThreshold" key */
  193. public static final String CONFIG_KEY_STREAM_FILE_TRESHOLD = "streamFileThreshold";
  194. /**
  195. * The "packedGitMmap" key
  196. * @since 5.1.13
  197. */
  198. public static final String CONFIG_KEY_PACKED_GIT_MMAP = "packedgitmmap";
  199. /**
  200. * The "packedGitWindowSize" key
  201. * @since 5.1.13
  202. */
  203. public static final String CONFIG_KEY_PACKED_GIT_WINDOWSIZE = "packedgitwindowsize";
  204. /**
  205. * The "packedGitLimit" key
  206. * @since 5.1.13
  207. */
  208. public static final String CONFIG_KEY_PACKED_GIT_LIMIT = "packedgitlimit";
  209. /**
  210. * The "packedGitOpenFiles" key
  211. * @since 5.1.13
  212. */
  213. public static final String CONFIG_KEY_PACKED_GIT_OPENFILES = "packedgitopenfiles";
  214. /**
  215. * The "packedGitUseStrongRefs" key
  216. * @since 5.1.13
  217. */
  218. public static final String CONFIG_KEY_PACKED_GIT_USE_STRONGREFS = "packedgitusestrongrefs";
  219. /** The "remote" key */
  220. public static final String CONFIG_KEY_REMOTE = "remote";
  221. /** The "merge" key */
  222. public static final String CONFIG_KEY_MERGE = "merge";
  223. /** The "rebase" key */
  224. public static final String CONFIG_KEY_REBASE = "rebase";
  225. /** The "url" key */
  226. public static final String CONFIG_KEY_URL = "url";
  227. /** The "autosetupmerge" key */
  228. public static final String CONFIG_KEY_AUTOSETUPMERGE = "autosetupmerge";
  229. /** The "autosetuprebase" key */
  230. public static final String CONFIG_KEY_AUTOSETUPREBASE = "autosetuprebase";
  231. /**
  232. * The "autostash" key
  233. * @since 3.2
  234. */
  235. public static final String CONFIG_KEY_AUTOSTASH = "autostash";
  236. /** The "name" key */
  237. public static final String CONFIG_KEY_NAME = "name";
  238. /** The "email" key */
  239. public static final String CONFIG_KEY_EMAIL = "email";
  240. /** The "false" key (used to configure {@link #CONFIG_KEY_AUTOSETUPMERGE} */
  241. public static final String CONFIG_KEY_FALSE = "false";
  242. /** The "true" key (used to configure {@link #CONFIG_KEY_AUTOSETUPMERGE} */
  243. public static final String CONFIG_KEY_TRUE = "true";
  244. /**
  245. * The "always" key (used to configure {@link #CONFIG_KEY_AUTOSETUPREBASE}
  246. * and {@link #CONFIG_KEY_AUTOSETUPMERGE}
  247. */
  248. public static final String CONFIG_KEY_ALWAYS = "always";
  249. /** The "never" key (used to configure {@link #CONFIG_KEY_AUTOSETUPREBASE} */
  250. public static final String CONFIG_KEY_NEVER = "never";
  251. /** The "local" key (used to configure {@link #CONFIG_KEY_AUTOSETUPREBASE} */
  252. public static final String CONFIG_KEY_LOCAL = "local";
  253. /** The "createchangeid" key */
  254. public static final String CONFIG_KEY_CREATECHANGEID = "createchangeid";
  255. /** The "defaultsourceref" key */
  256. public static final String CONFIG_KEY_DEFBRANCHSTARTPOINT = "defbranchstartpoint";
  257. /** The "path" key */
  258. public static final String CONFIG_KEY_PATH = "path";
  259. /** The "update" key */
  260. public static final String CONFIG_KEY_UPDATE = "update";
  261. /**
  262. * The "ignore" key
  263. * @since 3.6
  264. */
  265. public static final String CONFIG_KEY_IGNORE = "ignore";
  266. /** The "compression" key */
  267. public static final String CONFIG_KEY_COMPRESSION = "compression";
  268. /** The "indexversion" key */
  269. public static final String CONFIG_KEY_INDEXVERSION = "indexversion";
  270. /**
  271. * The "hidedotfiles" key
  272. * @since 3.5
  273. */
  274. public static final String CONFIG_KEY_HIDEDOTFILES = "hidedotfiles";
  275. /**
  276. * The "dirnogitlinks" key
  277. * @since 4.3
  278. */
  279. public static final String CONFIG_KEY_DIRNOGITLINKS = "dirNoGitLinks";
  280. /** The "precomposeunicode" key */
  281. public static final String CONFIG_KEY_PRECOMPOSEUNICODE = "precomposeunicode";
  282. /** The "pruneexpire" key */
  283. public static final String CONFIG_KEY_PRUNEEXPIRE = "pruneexpire";
  284. /**
  285. * The "prunepackexpire" key
  286. * @since 4.3
  287. */
  288. public static final String CONFIG_KEY_PRUNEPACKEXPIRE = "prunepackexpire";
  289. /**
  290. * The "logexpiry" key
  291. *
  292. * @since 4.7
  293. */
  294. public static final String CONFIG_KEY_LOGEXPIRY = "logExpiry";
  295. /**
  296. * The "autodetach" key
  297. *
  298. * @since 4.7
  299. */
  300. public static final String CONFIG_KEY_AUTODETACH = "autoDetach";
  301. /**
  302. * The "aggressiveDepth" key
  303. * @since 3.6
  304. */
  305. public static final String CONFIG_KEY_AGGRESSIVE_DEPTH = "aggressiveDepth";
  306. /**
  307. * The "aggressiveWindow" key
  308. * @since 3.6
  309. */
  310. public static final String CONFIG_KEY_AGGRESSIVE_WINDOW = "aggressiveWindow";
  311. /** The "mergeoptions" key */
  312. public static final String CONFIG_KEY_MERGEOPTIONS = "mergeoptions";
  313. /** The "ff" key */
  314. public static final String CONFIG_KEY_FF = "ff";
  315. /**
  316. * The "conflictStyle" key.
  317. *
  318. * @since 5.12
  319. */
  320. public static final String CONFIG_KEY_CONFLICTSTYLE = "conflictStyle";
  321. /**
  322. * The "checkstat" key
  323. *
  324. * @since 3.0
  325. */
  326. public static final String CONFIG_KEY_CHECKSTAT = "checkstat";
  327. /**
  328. * The "renamelimit" key in the "diff" section
  329. * @since 3.0
  330. */
  331. public static final String CONFIG_KEY_RENAMELIMIT = "renamelimit";
  332. /**
  333. * The "trustfolderstat" key in the "core" section
  334. * @since 3.6
  335. */
  336. public static final String CONFIG_KEY_TRUSTFOLDERSTAT = "trustfolderstat";
  337. /**
  338. * The "supportsAtomicFileCreation" key in the "core" section
  339. *
  340. * @since 4.5
  341. */
  342. public static final String CONFIG_KEY_SUPPORTSATOMICFILECREATION = "supportsatomicfilecreation";
  343. /**
  344. * The "noprefix" key in the "diff" section
  345. * @since 3.0
  346. */
  347. public static final String CONFIG_KEY_NOPREFIX = "noprefix";
  348. /**
  349. * A "renamelimit" value in the "diff" section
  350. * @since 3.0
  351. */
  352. public static final String CONFIG_RENAMELIMIT_COPY = "copy";
  353. /**
  354. * A "renamelimit" value in the "diff" section
  355. * @since 3.0
  356. */
  357. public static final String CONFIG_RENAMELIMIT_COPIES = "copies";
  358. /**
  359. * The "renames" key in the "diff" section
  360. * @since 3.0
  361. */
  362. public static final String CONFIG_KEY_RENAMES = "renames";
  363. /**
  364. * The "inCoreLimit" key in the "merge" section. It's a size limit (bytes) used to
  365. * control a file to be stored in {@code Heap} or {@code LocalFile} during the merge.
  366. * @since 4.9
  367. */
  368. public static final String CONFIG_KEY_IN_CORE_LIMIT = "inCoreLimit";
  369. /**
  370. * The "prune" key
  371. * @since 3.3
  372. */
  373. public static final String CONFIG_KEY_PRUNE = "prune";
  374. /**
  375. * The "streamBuffer" key
  376. * @since 4.0
  377. */
  378. public static final String CONFIG_KEY_STREAM_BUFFER = "streamBuffer";
  379. /**
  380. * The "streamRatio" key
  381. * @since 4.0
  382. */
  383. public static final String CONFIG_KEY_STREAM_RATIO = "streamRatio";
  384. /**
  385. * Flag in the filter section whether to use JGit's implementations of
  386. * filters and hooks
  387. * @since 4.6
  388. */
  389. public static final String CONFIG_KEY_USEJGITBUILTIN = "useJGitBuiltin";
  390. /**
  391. * The "fetchRecurseSubmodules" key
  392. * @since 4.7
  393. */
  394. public static final String CONFIG_KEY_FETCH_RECURSE_SUBMODULES = "fetchRecurseSubmodules";
  395. /**
  396. * The "recurseSubmodules" key
  397. * @since 4.7
  398. */
  399. public static final String CONFIG_KEY_RECURSE_SUBMODULES = "recurseSubmodules";
  400. /**
  401. * The "required" key
  402. * @since 4.11
  403. */
  404. public static final String CONFIG_KEY_REQUIRED = "required";
  405. /**
  406. * The "lfs" section
  407. * @since 4.11
  408. */
  409. public static final String CONFIG_SECTION_LFS = "lfs";
  410. /**
  411. * The "i18n" section
  412. *
  413. * @since 5.2
  414. */
  415. public static final String CONFIG_SECTION_I18N = "i18n";
  416. /**
  417. * The "logOutputEncoding" key
  418. *
  419. * @since 5.2
  420. */
  421. public static final String CONFIG_KEY_LOG_OUTPUT_ENCODING = "logOutputEncoding";
  422. /**
  423. * The "filesystem" section
  424. * @since 5.1.9
  425. */
  426. public static final String CONFIG_FILESYSTEM_SECTION = "filesystem";
  427. /**
  428. * The "timestampResolution" key
  429. * @since 5.1.9
  430. */
  431. public static final String CONFIG_KEY_TIMESTAMP_RESOLUTION = "timestampResolution";
  432. /**
  433. * The "minRacyThreshold" key
  434. * @since 5.1.9
  435. */
  436. public static final String CONFIG_KEY_MIN_RACY_THRESHOLD = "minRacyThreshold";
  437. /**
  438. * The "refStorage" key
  439. *
  440. * @since 5.6.2
  441. */
  442. public static final String CONFIG_KEY_REF_STORAGE = "refStorage";
  443. /**
  444. * The "extensions" section
  445. *
  446. * @since 5.6.2
  447. */
  448. public static final String CONFIG_EXTENSIONS_SECTION = "extensions";
  449. /**
  450. * The extensions.refStorage key
  451. * @since 5.7
  452. */
  453. public static final String CONFIG_KEY_REFSTORAGE = "refStorage";
  454. /**
  455. * The "reftable" refStorage format
  456. * @since 5.7
  457. */
  458. public static final String CONFIG_REF_STORAGE_REFTABLE = "reftable";
  459. /**
  460. * The "jmx" section
  461. * @since 5.1.13
  462. */
  463. public static final String CONFIG_JMX_SECTION = "jmx";
  464. /**
  465. * The "pack.bigfilethreshold" key
  466. * @since 5.8
  467. */
  468. public static final String CONFIG_KEY_BIGFILE_THRESHOLD = "bigfilethreshold";
  469. /**
  470. * The "pack.bitmapContiguousCommitCount" key
  471. * @since 5.8
  472. */
  473. public static final String CONFIG_KEY_BITMAP_CONTIGUOUS_COMMIT_COUNT = "bitmapcontiguouscommitcount";
  474. /**
  475. * The "pack.bitmapDistantCommitSpan" key
  476. * @since 5.8
  477. */
  478. public static final String CONFIG_KEY_BITMAP_DISTANT_COMMIT_SPAN = "bitmapdistantcommitspan";
  479. /**
  480. * The "pack.bitmapExcessiveBranchCount" key
  481. * @since 5.8
  482. */
  483. public static final String CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_COUNT = "bitmapexcessivebranchcount";
  484. /**
  485. * The "pack.bitmapInactiveBranchAgeInDays" key
  486. * @since 5.8
  487. */
  488. public static final String CONFIG_KEY_BITMAP_INACTIVE_BRANCH_AGE_INDAYS = "bitmapinactivebranchageindays";
  489. /**
  490. * The "pack.bitmapRecentCommitSpan" key
  491. * @since 5.8
  492. */
  493. public static final String CONFIG_KEY_BITMAP_RECENT_COMMIT_COUNT = "bitmaprecentcommitspan";
  494. /**
  495. * The "pack.buildBitmaps" key
  496. * @since 5.8
  497. */
  498. public static final String CONFIG_KEY_BUILD_BITMAPS = "buildbitmaps";
  499. /**
  500. * The "pack.cutDeltaChains" key
  501. * @since 5.8
  502. */
  503. public static final String CONFIG_KEY_CUT_DELTACHAINS = "cutdeltachains";
  504. /**
  505. * The "pack.deltaCacheLimit" key
  506. * @since 5.8
  507. */
  508. public static final String CONFIG_KEY_DELTA_CACHE_LIMIT = "deltacachelimit";
  509. /**
  510. * The "pack.deltaCacheSize" key
  511. * @since 5.8
  512. */
  513. public static final String CONFIG_KEY_DELTA_CACHE_SIZE = "deltacachesize";
  514. /**
  515. * The "pack.deltaCompression" key
  516. * @since 5.8
  517. */
  518. public static final String CONFIG_KEY_DELTA_COMPRESSION = "deltacompression";
  519. /**
  520. * The "pack.depth" key
  521. * @since 5.8
  522. */
  523. public static final String CONFIG_KEY_DEPTH = "depth";
  524. /**
  525. * The "pack.minSizePreventRacyPack" key
  526. * @since 5.8
  527. */
  528. public static final String CONFIG_KEY_MIN_SIZE_PREVENT_RACYPACK = "minsizepreventracypack";
  529. /**
  530. * The "pack.reuseDeltas" key
  531. * @since 5.8
  532. */
  533. public static final String CONFIG_KEY_REUSE_DELTAS = "reusedeltas";
  534. /**
  535. * The "pack.reuseObjects" key
  536. * @since 5.8
  537. */
  538. public static final String CONFIG_KEY_REUSE_OBJECTS = "reuseobjects";
  539. /**
  540. * The "pack.singlePack" key
  541. * @since 5.8
  542. */
  543. public static final String CONFIG_KEY_SINGLE_PACK = "singlepack";
  544. /**
  545. * The "pack.threads" key
  546. * @since 5.8
  547. */
  548. public static final String CONFIG_KEY_THREADS = "threads";
  549. /**
  550. * The "pack.waitPreventRacyPack" key
  551. * @since 5.8
  552. */
  553. public static final String CONFIG_KEY_WAIT_PREVENT_RACYPACK = "waitpreventracypack";
  554. /**
  555. * The "pack.window" key
  556. * @since 5.8
  557. */
  558. public static final String CONFIG_KEY_WINDOW = "window";
  559. /**
  560. * The "pack.windowMemory" key
  561. * @since 5.8
  562. */
  563. public static final String CONFIG_KEY_WINDOW_MEMORY = "windowmemory";
  564. /**
  565. * The "feature" section
  566. *
  567. * @since 5.9
  568. */
  569. public static final String CONFIG_FEATURE_SECTION = "feature";
  570. /**
  571. * The "feature.manyFiles" key
  572. *
  573. * @since 5.9
  574. */
  575. public static final String CONFIG_KEY_MANYFILES = "manyFiles";
  576. /**
  577. * The "index" section
  578. *
  579. * @since 5.9
  580. */
  581. public static final String CONFIG_INDEX_SECTION = "index";
  582. /**
  583. * The "version" key
  584. *
  585. * @since 5.9
  586. */
  587. public static final String CONFIG_KEY_VERSION = "version";
  588. /**
  589. * The "init" section
  590. *
  591. * @since 5.11
  592. */
  593. public static final String CONFIG_INIT_SECTION = "init";
  594. /**
  595. * The "defaultBranch" key
  596. *
  597. * @since 5.11
  598. */
  599. public static final String CONFIG_KEY_DEFAULT_BRANCH = "defaultbranch";
  600. /**
  601. * The "pack.searchForReuseTimeout" key
  602. *
  603. * @since 5.13
  604. */
  605. public static final String CONFIG_KEY_SEARCH_FOR_REUSE_TIMEOUT = "searchforreusetimeout";
  606. }