1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.codehaus.mojo.scmchangelog.scm.hg;
25
26 import java.util.ArrayList;
27 import java.util.Collections;
28 import java.util.Iterator;
29 import java.util.List;
30 import org.apache.maven.plugin.MojoExecutionException;
31 import org.apache.maven.scm.ScmBranch;
32 import org.apache.maven.scm.ScmException;
33 import org.apache.maven.scm.ScmFileSet;
34 import org.apache.maven.scm.ScmRevision;
35 import org.apache.maven.scm.ScmTag;
36 import org.apache.maven.scm.ScmVersion;
37 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
38 import org.apache.maven.scm.command.list.ListScmResult;
39 import org.apache.maven.scm.manager.ScmManager;
40 import org.apache.maven.scm.repository.ScmRepository;
41 import org.codehaus.mojo.scmchangelog.changelog.Release;
42 import org.codehaus.mojo.scmchangelog.changelog.log.ScmLogEntry;
43 import org.codehaus.mojo.scmchangelog.changelog.log.grammar.GrammarEnum;
44 import org.codehaus.mojo.scmchangelog.scm.hg.command.changelog.BetterChangeSet;
45 import org.codehaus.mojo.scmchangelog.scm.util.ScmAdapter;
46 import org.codehaus.mojo.scmchangelog.scm.util.ScmTarget;
47 import org.codehaus.mojo.scmchangelog.tags.Tag;
48
49
50
51
52
53
54 public class HgScmAdapter extends ScmAdapter
55 {
56
57
58
59
60
61
62 public HgScmAdapter( ScmManager currentManager, GrammarEnum currentGrammar )
63 {
64 super( currentManager, currentGrammar );
65 }
66
67
68
69
70
71
72
73
74
75 public List getListOfReleases( ScmRepository repository, ScmFileSet fileSet )
76 throws ScmException, MojoExecutionException
77 {
78 ListScmResult result = this.manager.list( repository, fileSet, false,
79 getScmVersion( HgTargetEnum.TAG, "" ) );
80 final List tags = result.getFiles();
81 final List releases = new ArrayList( 10 );
82 Iterator iter = tags.iterator();
83 String startRevision = "0";
84
85 while ( iter.hasNext() )
86 {
87 Tag tag = ( Tag ) iter.next();
88 getLogger().info( tag.toString() );
89
90 final ChangeLogScmResult logs = this.manager.changeLog( repository,
91 fileSet, getScmVersion( HgTargetEnum.TRUNK, startRevision ),
92 getScmVersion( HgTargetEnum.TRUNK, tag.getEndRevision() ), "" );
93 startRevision = tag.getEndRevision();
94 getLogger().info( logs.getChangeLog().toString() );
95 tag.setDate( logs.getChangeLog().getEndDate() );
96
97 Release release = new Release( tag,
98 getEntries( logs.getChangeLog().getChangeSets() ) );
99 releases.add( release );
100 }
101 Collections.reverse( releases );
102 return releases;
103 }
104
105
106
107
108
109
110 protected List getEntries( List changeSets )
111 {
112 List elements = new ArrayList( changeSets.size() );
113 Iterator iter = changeSets.iterator();
114 while ( iter.hasNext() )
115 {
116 BetterChangeSet changeSet = ( BetterChangeSet ) iter.next();
117 ScmLogEntry entry = new ScmLogEntry();
118 entry.setAuthor( changeSet.getAuthor() );
119 entry.setDate( changeSet.getDate() );
120 getLogger().info( changeSet.getComment() );
121 entry.setMessage( grammar.extractMessage( changeSet.getComment() ) );
122 entry.setRevision( changeSet.getRevision() );
123 elements.add( entry );
124 }
125 return elements;
126 }
127
128
129
130
131
132
133
134
135 public ScmVersion getScmVersion( ScmTarget versionType, String version )
136 throws MojoExecutionException
137 {
138 if ( HgTargetEnum.TAG.equals( versionType ) )
139 {
140 return new ScmTag( version );
141 }
142 else if ( HgTargetEnum.BRANCH.equals( versionType ) )
143 {
144 return new ScmBranch( version );
145 }
146 else if ( HgTargetEnum.TRUNK.equals( versionType ) )
147 {
148 return new ScmRevision( version );
149 }
150 throw new MojoExecutionException( "Unknown version type : "
151 + versionType );
152 }
153
154 }
155