View Javadoc
1   /*
2    * Copyright (C) 2013, Gunnar Wagenknecht
3    * Copyright (C) 2010, Chris Aniszczyk <caniszczyk@gmail.com>
4    * Copyright (C) 2009, Christian Halstrick <christian.halstrick@sap.com>
5    * Copyright (C) 2009, Google Inc.
6    * Copyright (C) 2007, Robin Rosenberg <robin.rosenberg@dewire.com>
7    * Copyright (C) 2006-2008, Shawn O. Pearce <spearce@spearce.org>
8    * and other copyright owners as documented in the project's IP log.
9    *
10   * This program and the accompanying materials are made available
11   * under the terms of the Eclipse Distribution License v1.0 which
12   * accompanies this distribution, is reproduced below, and is
13   * available at http://www.eclipse.org/org/documents/edl-v10.php
14   *
15   * All rights reserved.
16   *
17   * Redistribution and use in source and binary forms, with or
18   * without modification, are permitted provided that the following
19   * conditions are met:
20   *
21   * - Redistributions of source code must retain the above copyright
22   *   notice, this list of conditions and the following disclaimer.
23   *
24   * - Redistributions in binary form must reproduce the above
25   *   copyright notice, this list of conditions and the following
26   *   disclaimer in the documentation and/or other materials provided
27   *   with the distribution.
28   *
29   * - Neither the name of the Eclipse Foundation, Inc. nor the
30   *   names of its contributors may be used to endorse or promote
31   *   products derived from this software without specific prior
32   *   written permission.
33   *
34   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
35   * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
36   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
38   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
39   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
43   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
46   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47   */
48  
49  package org.eclipse.jgit.lib;
50  
51  import static java.util.zip.Deflater.DEFAULT_COMPRESSION;
52  
53  import org.eclipse.jgit.lib.Config.SectionParser;
54  
55  /**
56   * This class keeps git repository core parameters.
57   */
58  public class CoreConfig {
59  	/** Key for {@link Config#get(SectionParser)}. */
60  	public static final Config.SectionParser<CoreConfig> KEY = CoreConfig::new;
61  
62  	/** Permissible values for {@code core.autocrlf}. */
63  	public static enum AutoCRLF {
64  		/** Automatic CRLF-&gt;LF conversion is disabled. */
65  		FALSE,
66  
67  		/** Automatic CRLF-&gt;LF conversion is enabled. */
68  		TRUE,
69  
70  		/** CRLF-&gt;LF performed, but no LF-&gt;CRLF. */
71  		INPUT;
72  	}
73  
74  	/**
75  	 * Permissible values for {@code core.eol}.
76  	 * <p>
77  	 * https://git-scm.com/docs/gitattributes
78  	 *
79  	 * @since 4.3
80  	 */
81  	public static enum EOL {
82  		/** checkin with LF, checkout with CRLF. */
83  		CRLF,
84  
85  		/** checkin with LF, checkout without conversion. */
86  		LF,
87  
88  		/** use the platform's native line ending. */
89  		NATIVE;
90  	}
91  
92  	/**
93  	 * EOL stream conversion protocol
94  	 *
95  	 * @since 4.3
96  	 */
97  	public static enum EolStreamType {
98  		/** convert to CRLF without binary detection */
99  		TEXT_CRLF,
100 
101 		/** convert to LF without binary detection */
102 		TEXT_LF,
103 
104 		/** convert to CRLF with binary detection */
105 		AUTO_CRLF,
106 
107 		/** convert to LF with binary detection */
108 		AUTO_LF,
109 
110 		/** do not convert */
111 		DIRECT;
112 	}
113 
114 	/**
115 	 * Permissible values for {@code core.checkstat}
116 	 *
117 	 * @since 3.0
118 	 */
119 	public static enum CheckStat {
120 		/**
121 		 * Only check the size and whole second part of time stamp when
122 		 * comparing the stat info in the dircache with actual file stat info.
123 		 */
124 		MINIMAL,
125 
126 		/**
127 		 * Check as much of the dircache stat info as possible. Implementation
128 		 * limits may apply.
129 		 */
130 		DEFAULT
131 	}
132 
133 	private final int compression;
134 
135 	private final int packIndexVersion;
136 
137 	private final boolean logAllRefUpdates;
138 
139 	private final String excludesfile;
140 
141 	private final String attributesfile;
142 
143 	/**
144 	 * Options for symlink handling
145 	 *
146 	 * @since 3.3
147 	 */
148 	public static enum SymLinks {
149 		/** Checkout symbolic links as plain files */
150 		FALSE,
151 		/** Checkout symbolic links as links */
152 		TRUE
153 	}
154 
155 	/**
156 	 * Options for hiding files whose names start with a period
157 	 *
158 	 * @since 3.5
159 	 */
160 	public static enum HideDotFiles {
161 		/** Do not hide .files */
162 		FALSE,
163 		/** Hide add .files */
164 		TRUE,
165 		/** Hide only .git */
166 		DOTGITONLY
167 	}
168 
169 	private CoreConfig(Config rc) {
170 		compression = rc.getInt(ConfigConstants.CONFIG_CORE_SECTION,
171 				ConfigConstants.CONFIG_KEY_COMPRESSION, DEFAULT_COMPRESSION);
172 		packIndexVersion = rc.getInt(ConfigConstants.CONFIG_PACK_SECTION,
173 				ConfigConstants.CONFIG_KEY_INDEXVERSION, 2);
174 		logAllRefUpdates = rc.getBoolean(ConfigConstants.CONFIG_CORE_SECTION,
175 				ConfigConstants.CONFIG_KEY_LOGALLREFUPDATES, true);
176 		excludesfile = rc.getString(ConfigConstants.CONFIG_CORE_SECTION, null,
177 				ConfigConstants.CONFIG_KEY_EXCLUDESFILE);
178 		attributesfile = rc.getString(ConfigConstants.CONFIG_CORE_SECTION,
179 				null, ConfigConstants.CONFIG_KEY_ATTRIBUTESFILE);
180 	}
181 
182 	/**
183 	 * Get the compression level to use when storing loose objects
184 	 *
185 	 * @return The compression level to use when storing loose objects
186 	 */
187 	public int getCompression() {
188 		return compression;
189 	}
190 
191 	/**
192 	 * Get the preferred pack index file format; 0 for oldest possible.
193 	 *
194 	 * @return the preferred pack index file format; 0 for oldest possible.
195 	 */
196 	public int getPackIndexVersion() {
197 		return packIndexVersion;
198 	}
199 
200 	/**
201 	 * Whether to log all refUpdates
202 	 *
203 	 * @return whether to log all refUpdates
204 	 */
205 	public boolean isLogAllRefUpdates() {
206 		return logAllRefUpdates;
207 	}
208 
209 	/**
210 	 * Get path of excludesfile
211 	 *
212 	 * @return path of excludesfile
213 	 */
214 	public String getExcludesFile() {
215 		return excludesfile;
216 	}
217 
218 	/**
219 	 * Get path of attributesfile
220 	 *
221 	 * @return path of attributesfile
222 	 * @since 3.7
223 	 */
224 	public String getAttributesFile() {
225 		return attributesfile;
226 	}
227 }