View Javadoc
1   package org.apache.maven.scm.provider.git.gitexe.command.remoteinfo;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
23  import org.apache.maven.scm.log.ScmLogger;
24  import org.codehaus.plexus.util.cli.StreamConsumer;
25  
26  import java.util.HashMap;
27  import java.util.regex.Matcher;
28  import java.util.regex.Pattern;
29  
30  /**
31   * @author Bertrand Paquet
32   */
33  public class GitRemoteInfoConsumer
34      implements StreamConsumer
35  {
36  
37      /**
38       * The pattern used to match branches
39       */
40      private static final Pattern BRANCH_PATTERN = Pattern.compile( "^(.*)\\s+refs/heads/(.*)" );
41  
42      /**
43       * The pattern used to match tags
44       */
45      private static final Pattern TAGS_PATTERN = Pattern.compile( "^(.*)\\s+refs/tags/(.*)" );
46  
47      private ScmLogger logger;
48  
49      private RemoteInfoScmResult remoteInfoScmResult;
50  
51      // ----------------------------------------------------------------------
52      //
53      // ----------------------------------------------------------------------
54  
55      public GitRemoteInfoConsumer( ScmLogger logger, String commandLine )
56      {
57          this.logger = logger;
58          this.remoteInfoScmResult =
59              new RemoteInfoScmResult( commandLine, new HashMap<String, String>(), new HashMap<String, String>() );
60      }
61  
62      // ----------------------------------------------------------------------
63      // StreamConsumer Implementation
64      // ----------------------------------------------------------------------
65  
66      /**
67       * {@inheritDoc}
68       */
69      public void consumeLine( String line )
70      {
71          if ( logger.isDebugEnabled() )
72          {
73              logger.debug( line );
74          }
75          
76          Matcher matcher = BRANCH_PATTERN.matcher( line );
77          if ( matcher.matches() )
78          {
79              remoteInfoScmResult.getBranches().put( matcher.group( 2 ), matcher.group( 1 ) );
80          }
81          
82          matcher = TAGS_PATTERN.matcher( line );
83          if ( matcher.matches() )
84          {
85              remoteInfoScmResult.getTags().put( matcher.group( 2 ), matcher.group( 1 ) );
86          }
87  
88      }
89  
90      public RemoteInfoScmResult getRemoteInfoScmResult()
91      {
92          return remoteInfoScmResult;
93      }
94  
95  }