1 package org.apache.maven.scm.provider.hg.command;
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.ScmFileStatus;
23 import org.apache.maven.scm.log.ScmLogger;
24 import org.apache.maven.scm.util.AbstractConsumer;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.Iterator;
29 import java.util.List;
30 import java.util.Map;
31
32
33
34
35
36
37
38
39
40 public class HgConsumer
41 extends AbstractConsumer
42 {
43
44
45
46
47 private static final Map identifiers = new HashMap();
48
49
50
51
52 private static final Map messages = new HashMap();
53
54
55
56
57
58
59 private static final int MAX_STDERR_SIZE = 10;
60
61
62
63
64 private final List stderr = new ArrayList();
65
66 static
67 {
68
69
70 identifiers.put( "adding", ScmFileStatus.ADDED );
71 identifiers.put( "unknown", ScmFileStatus.UNKNOWN );
72 identifiers.put( "modified", ScmFileStatus.MODIFIED );
73 identifiers.put( "removed", ScmFileStatus.DELETED );
74 identifiers.put( "renamed", ScmFileStatus.MODIFIED );
75
76
77
78 identifiers.put( "A", ScmFileStatus.ADDED );
79 identifiers.put( "?", ScmFileStatus.UNKNOWN );
80 identifiers.put( "M", ScmFileStatus.MODIFIED );
81 identifiers.put( "R", ScmFileStatus.DELETED );
82 identifiers.put( "C", ScmFileStatus.CHECKED_IN );
83 identifiers.put( "!", ScmFileStatus.MISSING );
84 identifiers.put( "I", ScmFileStatus.UNKNOWN );
85
86 messages.put( "hg: WARNING:", "WARNING" );
87 messages.put( "hg: ERROR:", "ERROR" );
88 messages.put( "'hg' ", "ERROR" );
89 }
90
91 public HgConsumer( ScmLogger logger )
92 {
93 super( logger );
94 }
95
96 public void doConsume( ScmFileStatus status, String trimmedLine )
97 {
98
99 }
100
101 public void consumeLine( String line )
102 {
103 getLogger().debug( line );
104 String trimmedLine = line.trim();
105
106 String statusStr = processInputForKnownIdentifiers( trimmedLine );
107
108
109 if ( statusStr == null )
110 {
111 boolean isMessage = processInputForKnownMessages( trimmedLine );
112
113 if ( isMessage )
114 {
115 return;
116 }
117 }
118 else
119 {
120
121 trimmedLine = trimmedLine.substring( statusStr.length() );
122 trimmedLine = trimmedLine.trim();
123 }
124
125 ScmFileStatus status = statusStr != null ? ( (ScmFileStatus) identifiers.get( statusStr.intern() ) ) : null;
126 doConsume( status, trimmedLine );
127 }
128
129
130
131
132
133
134
135 public String getStdErr()
136 {
137 String str = "";
138 for ( Iterator it = stderr.iterator(); it.hasNext(); )
139 {
140 str += it.next();
141 }
142 return str;
143 }
144
145 private static String processInputForKnownIdentifiers( String line )
146 {
147 for ( Iterator it = identifiers.keySet().iterator(); it.hasNext(); )
148 {
149 String id = (String) it.next();
150 if ( line.startsWith( id ) )
151 {
152 return id;
153 }
154 }
155 return null;
156 }
157
158 private boolean processInputForKnownMessages( String line )
159 {
160 for ( Iterator it = messages.keySet().iterator(); it.hasNext(); )
161 {
162 String prefix = (String) it.next();
163 if ( line.startsWith( prefix ) )
164 {
165 stderr.add( line );
166 if ( stderr.size() > MAX_STDERR_SIZE )
167 {
168 stderr.remove( 0 );
169 }
170 String message = line.substring( prefix.length() );
171 if ( messages.get( prefix ).equals( "WARNING" ) )
172 {
173 getLogger().warn( message );
174 }
175 else
176 {
177 getLogger().error( message );
178 }
179 return true;
180 }
181 }
182 return false;
183 }
184 }