]> source.dussan.org Git - jgit.git/commitdiff
FS: Allow to manually set the path to the Git system config file 77/48477/3
authorSebastian Schuberth <sschuberth@gmail.com>
Fri, 22 May 2015 15:21:27 +0000 (17:21 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 25 May 2015 19:23:21 +0000 (21:23 +0200)
Now that d7a4473 removed the gitprefix property, we did not have a way to
specify the path to the Git system config file in case
discoverGitSystemConfig() fails. Fix that by introducing a member variable
that caches the result of discoverGitSystemConfig() as well as a setter
method to overwrite the content of that variable.

Change-Id: Icd965bffbe2f11b18c9505ee2ddd2afad5b64d70
Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java

index 557aa8e03ecb6b07548fd14660c9a96300a4a55b..a46dc33cdb4c8406da692a36517210bf50d03df4 100644 (file)
@@ -157,6 +157,8 @@ public abstract class FS {
 
        private volatile Holder<File> userHome;
 
+       private volatile Holder<File> gitSystemConfig;
+
        /**
         * Constructs a file system abstraction.
         */
@@ -172,6 +174,7 @@ public abstract class FS {
         */
        protected FS(FS src) {
                userHome = src.userHome;
+               gitSystemConfig = src.gitSystemConfig;
        }
 
        /** @return a new instance of the same type of FS. */
@@ -547,6 +550,31 @@ public abstract class FS {
                return new File(w);
        }
 
+       /**
+        * @return the currently used path to the system-wide Git configuration
+        *         file or {@code null} if none has been set.
+        * @since 4.0
+        */
+       public File getGitSystemConfig() {
+               if (gitSystemConfig == null) {
+                       gitSystemConfig = new Holder<File>(discoverGitSystemConfig());
+               }
+               return gitSystemConfig.value;
+       }
+
+       /**
+        * Set the path to the system-wide Git configuration file to use.
+        *
+        * @param configFile
+        *            the path to the config file.
+        * @return {@code this}
+        * @since 4.0
+        */
+       public FS setGitSystemConfig(File configFile) {
+               gitSystemConfig = new Holder<File>(configFile);
+               return this;
+       }
+
        /**
         * @param grandchild
         * @return the parent directory of this file's parent directory or
index 04a7051a720d8bd369f7eb82757820c52e4aec90..b4233b6ccda3d343543d34968fa90bfbb262c869 100644 (file)
@@ -89,7 +89,7 @@ public abstract class SystemReader {
                }
 
                public FileBasedConfig openSystemConfig(Config parent, FS fs) {
-                       File configFile = fs.discoverGitSystemConfig();
+                       File configFile = fs.getGitSystemConfig();
                        if (configFile == null) {
                                return new FileBasedConfig(null, fs) {
                                        public void load() {