001 package org.apache.maven.scm.provider.git;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import org.codehaus.plexus.util.IOUtil;
023 import org.codehaus.plexus.util.StringUtils;
024
025 import java.io.BufferedReader;
026 import java.io.File;
027 import java.io.FileReader;
028 import java.io.IOException;
029 import java.util.ArrayList;
030 import java.util.Iterator;
031 import java.util.List;
032
033 /**
034 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
035 *
036 */
037 public class GitConfigFileReader
038 {
039 private File configDirectory;
040
041 public File getConfigDirectory()
042 {
043 if ( configDirectory == null )
044 {
045
046 File confDir = new File( ".git" );
047
048 if ( confDir.exists() )
049 {
050 configDirectory = confDir;
051 }
052 else
053 {
054 confDir = new File( "." );
055
056 if ( confDir.exists() )
057 {
058 configDirectory = confDir;
059 }
060 }
061
062 }
063
064 return configDirectory;
065 }
066
067 public void setConfigDirectory( File configDirectory )
068 {
069 this.configDirectory = configDirectory;
070 }
071
072 public String getProperty( String group, String propertyName )
073 {
074 List<String> lines = getConfLines();
075
076 boolean inGroup = false;
077 for ( Iterator<String> i = lines.iterator(); i.hasNext(); )
078 {
079 String line = i.next().trim();
080
081 if ( !inGroup )
082 {
083 if ( ( "[" + group + "]" ).equals( line ) )
084 {
085 inGroup = true;
086 }
087 }
088 else
089 {
090 if ( line.startsWith( "[" ) && line.endsWith( "]" ) )
091 {
092 //a new group start
093 return null;
094 }
095
096 if ( line.startsWith( "#" ) )
097 {
098 continue;
099 }
100 if ( line.indexOf( '=' ) < 0 )
101 {
102 continue;
103 }
104
105 String property = line.substring( 0, line.indexOf( '=' ) ).trim();
106
107 if ( !property.equals( propertyName ) )
108 {
109 continue;
110 }
111
112 String value = line.substring( line.indexOf( '=' ) + 1 );
113 return value.trim();
114 }
115 }
116
117 return null;
118 }
119
120 /**
121 * Load the git config file
122 *
123 * @return the list of all lines
124 */
125 private List<String> getConfLines()
126 {
127 List<String> lines = new ArrayList<String>();
128
129 BufferedReader reader = null;
130
131 try
132 {
133 if ( getConfigDirectory().exists() )
134 {
135 reader = new BufferedReader( new FileReader( new File( getConfigDirectory(), "config" ) ) );
136 String line;
137 while ( ( line = reader.readLine() ) != null )
138 {
139 if ( !line.startsWith( "#" ) && StringUtils.isNotEmpty( line ) )
140 {
141 lines.add( line );
142 }
143 }
144 }
145 }
146 catch ( IOException e )
147 {
148 lines.clear();
149 }
150 finally
151 {
152 IOUtil.close( reader );
153 reader = null;
154 }
155
156 return lines;
157 }
158 }