1 package org.apache.maven.scm.provider.cvslib.cvsjava.command.diff;
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.ScmException;
23 import org.apache.maven.scm.command.diff.DiffScmResult;
24 import org.apache.maven.scm.provider.cvslib.command.diff.AbstractCvsDiffCommand;
25 import org.apache.maven.scm.provider.cvslib.command.diff.CvsDiffConsumer;
26 import org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsConnection;
27 import org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsLogListener;
28 import org.codehaus.plexus.util.cli.Commandline;
29
30 import java.io.BufferedReader;
31 import java.io.ByteArrayInputStream;
32 import java.io.InputStreamReader;
33
34
35
36
37
38 public class CvsJavaDiffCommand
39 extends AbstractCvsDiffCommand
40 {
41
42 protected DiffScmResult executeCvsCommand( Commandline cl )
43 throws ScmException
44 {
45 CvsLogListener logListener = new CvsLogListener();
46
47 CvsDiffConsumer consumer = new CvsDiffConsumer( getLogger(), cl.getWorkingDirectory() );
48
49 try
50 {
51 boolean isSuccess = CvsConnection.processCommand( cl.getArguments(),
52 cl.getWorkingDirectory().getAbsolutePath(), logListener,
53 getLogger() );
54
55 if ( !isSuccess )
56 {
57 return new DiffScmResult( cl.toString(), "The cvs command failed.", logListener.getStderr().toString(),
58 false );
59 }
60 BufferedReader stream = new BufferedReader(
61 new InputStreamReader( new ByteArrayInputStream( logListener.getStdout().toString().getBytes() ) ) );
62
63 String line;
64
65 while ( ( line = stream.readLine() ) != null )
66 {
67 consumer.consumeLine( line );
68 }
69 }
70 catch ( Exception e )
71 {
72 e.printStackTrace();
73 return new DiffScmResult( cl.toString(), "The cvs command failed.", logListener.getStdout().toString(),
74 false );
75 }
76
77 return new DiffScmResult( cl.toString(), consumer.getChangedFiles(), consumer.getDifferences(),
78 consumer.getPatch() );
79 }
80
81 protected boolean isSupportNewFileParameter()
82 {
83 return false;
84 }
85 }