1 package org.apache.maven.scm.provider.cvslib.command.update;
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.ScmFile;
23 import org.apache.maven.scm.ScmFileStatus;
24 import org.apache.maven.scm.log.ScmLogger;
25 import org.codehaus.plexus.util.cli.StreamConsumer;
26 import org.codehaus.plexus.util.StringUtils;
27
28 import java.util.ArrayList;
29 import java.util.List;
30
31
32
33
34
35 public class CvsUpdateConsumer
36 implements StreamConsumer
37 {
38 private ScmLogger logger;
39
40 private List<ScmFile> files = new ArrayList<ScmFile>();
41
42 public CvsUpdateConsumer( ScmLogger logger )
43 {
44 this.logger = logger;
45 }
46
47
48 public void consumeLine( String line )
49 {
50 if ( logger.isDebugEnabled() )
51 {
52 logger.debug( line );
53 }
54
55 if ( line.length() < 3 )
56 {
57 if ( StringUtils.isNotEmpty( line ) )
58 {
59 if ( logger.isWarnEnabled() )
60 {
61 logger.warn( "Unable to parse output from command: line length must be bigger than 3. ("
62 + line + ")." );
63 }
64 }
65 return;
66 }
67
68 String status = line.substring( 0, 2 );
69
70 String file = line.substring( 2 );
71
72 if ( status.equals( "U " ) )
73 {
74 files.add( new ScmFile( file, ScmFileStatus.UPDATED ) );
75 }
76 else if ( status.equals( "P " ) )
77 {
78 files.add( new ScmFile( file, ScmFileStatus.PATCHED ) );
79 }
80 else if ( status.equals( "A " ) )
81 {
82 files.add( new ScmFile( file, ScmFileStatus.ADDED ) );
83 }
84 else if ( status.equals( "C " ) )
85 {
86 files.add( new ScmFile( file, ScmFileStatus.CONFLICT ) );
87 }
88 else if ( status.equals( "M " ) )
89 {
90 files.add( new ScmFile( file, ScmFileStatus.MODIFIED ) );
91 }
92 else if ( status.equals( "? " ) )
93 {
94 files.add( new ScmFile( file, ScmFileStatus.UNKNOWN ) );
95 }
96 else
97 {
98 if ( logger.isDebugEnabled() )
99 {
100 logger.warn( "Unknown status: '" + status + "' for file '" + file + "'." );
101 }
102 }
103 }
104
105 public List<ScmFile> getUpdatedFiles()
106 {
107 return files;
108 }
109 }