1 package org.apache.maven.surefire.its;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.Random;
27 import org.apache.maven.settings.Profile;
28 import org.apache.maven.settings.Repository;
29 import org.apache.maven.settings.RepositoryPolicy;
30 import org.apache.maven.settings.Settings;
31 import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
32 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
33 import org.apache.maven.shared.utils.ReaderFactory;
34 import org.apache.maven.shared.utils.WriterFactory;
35 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
36
37
38
39
40
41
42
43 public final class StagedLocalRepoHelper
44 {
45 private StagedLocalRepoHelper()
46 {
47 throw new IllegalAccessError( "Helper class" );
48 }
49
50 private static String toUrl( String filename )
51 {
52
53
54
55
56 String url = "file://" + new File( filename ).toURI().getPath();
57 if ( url.endsWith( "/" ) )
58 {
59 url = url.substring( 0, url.length() - 1 );
60 }
61 return url;
62 }
63
64
65 public static void createStagedSettingsXml( File originalSettingsXml, File stagedLocalRepo, File stagedSettingsXml )
66 throws IOException
67 {
68 Random entropy = new Random();
69 try
70 {
71 Settings settings = new SettingsXpp3Reader().read( ReaderFactory.newXmlReader( originalSettingsXml ) );
72
73 String localRepo = System.getProperty( "maven.repo.local" );
74
75 if ( localRepo == null )
76 {
77 localRepo = settings.getLocalRepository();
78 }
79
80 if ( localRepo == null )
81 {
82 localRepo = System.getProperty( "user.home" ) + "/.m2/repository";
83 }
84
85 File repoDir = new File( localRepo );
86
87 if ( !repoDir.exists() )
88 {
89 repoDir.mkdirs();
90 }
91
92
93 localRepo = repoDir.getAbsolutePath();
94
95 Profile profile = new Profile();
96 do
97 {
98 profile.setId( "stagedLocalRepo" + entropy.nextLong() );
99 }
100 while ( settings.getProfilesAsMap().containsKey( profile.getId() ) );
101
102 Repository repository = new Repository();
103 repository.setId( profile.getId() + entropy.nextLong() );
104 RepositoryPolicy policy = new RepositoryPolicy();
105 policy.setEnabled( true );
106 policy.setChecksumPolicy( "ignore" );
107 policy.setUpdatePolicy( "never" );
108 repository.setReleases( policy );
109 repository.setSnapshots( policy );
110 repository.setLayout( "default" );
111 repository.setName( "Original Local Repository" );
112 repository.setUrl( toUrl( localRepo ) );
113 profile.addPluginRepository( repository );
114 profile.addRepository( repository );
115 settings.addProfile( profile );
116 settings.addActiveProfile( profile.getId() );
117 settings.setLocalRepository( stagedLocalRepo.getAbsolutePath() );
118
119 for ( Iterator<Profile> it = settings.getProfiles().iterator(); it.hasNext(); )
120 {
121 profile = it.next();
122 disableUpdates( profile.getRepositories() );
123 disableUpdates( profile.getPluginRepositories() );
124 }
125
126 new SettingsXpp3Writer().write( WriterFactory.newXmlWriter( stagedSettingsXml ), settings );
127 }
128 catch ( XmlPullParserException e )
129 {
130 IOException ioe = new IOException( e.getMessage() );
131 ioe.initCause( e );
132 throw ioe;
133 }
134 }
135
136 private static void disableUpdates( List<Repository> repositories )
137 {
138 if ( repositories != null )
139 {
140 for ( Iterator<Repository> it = repositories.iterator(); it.hasNext(); )
141 {
142 Repository repo = it.next();
143 repo.setReleases( disableUpdates( repo.getReleases() ) );
144 repo.setSnapshots( disableUpdates( repo.getSnapshots() ) );
145 }
146 }
147 }
148
149 private static RepositoryPolicy disableUpdates( RepositoryPolicy policy )
150 {
151 if ( policy == null )
152 {
153 policy = new RepositoryPolicy();
154 }
155
156 policy.setUpdatePolicy( "never" );
157
158 return policy;
159 }
160
161 }