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     * @version $Id: GitConfigFileReader.java 1057016 2011-01-09 20:11:26Z olamy $
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    }