1 package org.apache.maven.scm.provider.git.gitexe.command.remoteinfo;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
32
33 public class GitRemoteInfoConsumer
34 implements StreamConsumer
35 {
36
37
38
39
40 private static final String BRANCH_PATTERN = "^(.*)\\s+refs/heads/(.*)";
41
42
43
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
80
81
82
83
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 }