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.apache.regexp.RE;
25  import org.apache.regexp.RESyntaxException;
26  import org.codehaus.plexus.util.cli.StreamConsumer;
27  
28  import java.util.HashMap;
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 String BRANCH_PATTERN = "^(.*)\\s+refs/heads/(.*)";
41  
42      /**
43       * The pattern used to match tags
44       */
45      private static final String TAGS_PATTERN = "^(.*)\\s+refs/tags/(.*)";
46  
47      private ScmLogger logger;
48  
49      private RemoteInfoScmResult remoteInfoScmResult;
50  
51      private RE branchRegexp;
52  
53      private RE tagRegexp;
54  
55      // ----------------------------------------------------------------------
56      //
57      // ----------------------------------------------------------------------
58  
59      public GitRemoteInfoConsumer( ScmLogger logger, String commandLine )
60      {
61          this.logger = logger;
62          this.remoteInfoScmResult =
63              new RemoteInfoScmResult( commandLine, new HashMap<String, String>(), new HashMap<String, String>() );
64  
65          try
66          {
67              this.branchRegexp = new RE( BRANCH_PATTERN );
68              this.tagRegexp = new RE( TAGS_PATTERN );
69          }
70          catch ( RESyntaxException ex )
71          {
72              throw new RuntimeException(
73                  "INTERNAL ERROR: Could not create regexp to parse git ls-remote file. This shouldn't happen. Something is probably wrong with the oro installation.",
74                  ex );
75          }
76      }
77  
78      // ----------------------------------------------------------------------
79      // StreamConsumer Implementation
80      // ----------------------------------------------------------------------
81  
82      /**
83       * {@inheritDoc}
84       */
85      public void consumeLine( String line )
86      {
87          if ( logger.isDebugEnabled() )
88          {
89              logger.debug( line );
90          }
91          if ( branchRegexp.match( line ) )
92          {
93              remoteInfoScmResult.getBranches().put( branchRegexp.getParen( 2 ), branchRegexp.getParen( 1 ) );
94          }
95          if ( tagRegexp.match( line ) )
96          {
97              remoteInfoScmResult.getTags().put( tagRegexp.getParen( 2 ), tagRegexp.getParen( 1 ) );
98          }
99  
100     }
101 
102     public RemoteInfoScmResult getRemoteInfoScmResult()
103     {
104         return remoteInfoScmResult;
105     }
106 
107 }