Skip to content

Commit 655bd0a

Browse files
committed
增加过滤更新文件
1 parent b31e788 commit 655bd0a

File tree

6 files changed

+73
-50
lines changed

6 files changed

+73
-50
lines changed

updiff-common/src/main/java/com/sand/updiff/common/GitRep.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package com.sand.updiff.common;
1515

16+
import com.sand.updiff.common.utils.FilePathUtils;
1617
import org.apache.maven.model.Resource;
1718
import org.apache.maven.plugin.logging.Log;
1819
import org.apache.maven.plugin.logging.SystemStreamLog;
@@ -61,7 +62,7 @@ public GitRep (String rootDir, String oldGitVersion, String newGitVersion, Strin
6162
this.newGitVersion = newGitVersion;
6263
this.basePath = basePath;
6364

64-
log.info(String.format("根目录:%s, 新版本:%s, 旧版本:%s, 模块目录:%s", rootDir, newGitVersion, oldGitVersion, basePath));
65+
log.info(String.format("Git 根目录:%s, Git 新版本号:%s, Git 旧版本号:%s, 模块目录:%s", rootDir, newGitVersion, oldGitVersion, basePath));
6566

6667
FileRepositoryBuilder builder = new FileRepositoryBuilder();
6768
Repository repository = builder.setGitDir(new File(getGitDirByRootDir(rootDir)))
@@ -86,7 +87,7 @@ public GitRep (String rootDir, String oldGitVersion, String newGitVersion, Strin
8687
.setOldTree(oldTreeIterator);
8788
String pathFilter = createDiffPrefixByRootDir(this.basePath);
8889
if(!"".equals(pathFilter)){
89-
log.info(String.format("路径过滤:%s", pathFilter));
90+
log.info(String.format("Git 路径过滤:%s", pathFilter));
9091
command.setPathFilter(PathFilter.create(pathFilter));
9192
}
9293
this.diffs = command.call();
@@ -130,16 +131,23 @@ public List<DiffItem> getDiffItems(List<Resource> sourceStructFiles){
130131
path = removePrefix(modelDirName, path);
131132
//在去除其他前缀
132133
String newPathProfix = getPrefixByGitPath(resourceMap, path);
134+
boolean isNeedUpdate = false;
133135
if(newPathProfix != null){
134136
path = removePrefix(newPathProfix, path);
135137

138+
Resource resource = resourceMap.get(newPathProfix);
139+
if(!FilePathUtils.isFiltered(resource, path)){
140+
diffEls.add(new DiffItem(newPathProfix, entry.getChangeType().name(), path));
141+
isNeedUpdate = true;
142+
}
143+
}
136144

145+
if(isNeedUpdate){
137146
log.info(String.format("需要更新的文件:%s", path));
138147
} else {
139148
log.info(String.format("不需要更新的文件:%s", path));
140149
}
141150

142-
diffEls.add(new DiffItem(newPathProfix, entry.getChangeType().name(), path));
143151
}
144152

145153
return diffEls;
@@ -159,14 +167,13 @@ private static String getGitDirByRootDir(String rootDir){
159167
}
160168

161169
private static String createDiffPrefix (String basePath, String path){
162-
if(path.length() > basePath.length() && path.indexOf(basePath) == 0){
170+
if(path.indexOf(basePath) == 0){
163171
path = path.substring(basePath.length()).replace("\\", "/");
164-
if(path.indexOf("/") == 0){
165-
path = path.substring(1);
166-
}
167-
return path;
168172
}
169-
return "";
173+
if(path.indexOf("/") == 0){
174+
path = path.substring(1);
175+
}
176+
return path;
170177
}
171178

172179
private static String removePrefix (String prefix, String gitPath){

updiff-common/src/main/java/com/sand/updiff/common/utils/FilePathUtils.java

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package com.sand.updiff.common.utils;
1515

1616
import org.apache.maven.model.Resource;
17+
import org.codehaus.plexus.util.SelectorUtils;
1718

1819
import java.io.File;
1920
import java.util.List;
@@ -84,36 +85,31 @@ public static String getSameSubfixPath(String path1, String path2){
8485
return null;
8586
}
8687

87-
public static boolean isFilted(Resource resource, String path){
88-
89-
if(resource.isFiltering()){
90-
boolean isInclude = false;
91-
List<String> includes = resource.getIncludes();
92-
if(includes != null && !includes.isEmpty()){
93-
for (String include: includes){
94-
if(Pattern.compile(include).matcher(path).find()){
95-
isInclude = true;
96-
break;
97-
}
88+
public static boolean isFiltered(Resource resource, String path){
89+
90+
List<String> excludes = resource.getExcludes();
91+
if(excludes != null && !excludes.isEmpty()){
92+
for (String exclude: excludes){
93+
if(SelectorUtils.matchPath(exclude, path, true)){
94+
return true;
9895
}
99-
} else {
100-
isInclude = true;
10196
}
97+
}
10298

103-
boolean isExclude = false;
104-
List<String> excludes = resource.getExcludes();
105-
if(excludes != null && !excludes.isEmpty()){
106-
for (String exclude: excludes){
107-
if(Pattern.compile(exclude).matcher(path).find()){
108-
isExclude = true;
109-
break;
110-
}
99+
boolean isInclude = false;
100+
List<String> includes = resource.getIncludes();
101+
if(includes != null && !includes.isEmpty()){
102+
for (String include: includes){
103+
if(SelectorUtils.matchPath(include, path, true)){
104+
isInclude = true;
105+
break;
111106
}
112107
}
113-
114-
return isExclude && !isInclude;
108+
} else {
109+
isInclude = true;
115110
}
116111

117-
return false;
112+
return !isInclude;
113+
118114
}
119115
}

updiff-common/src/test/java/com/sand/updiff/common/utils/FilePathUtilsTest.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,26 @@ public void test_getSameSubfixPath(){
4444
@Test
4545
public void test_resource_filted(){
4646

47-
Resource resource = new Resource();
48-
resource.setFiltering(true);
49-
resource.addInclude("config/*");
50-
resource.addExclude("bin/*");
47+
Resource resourceInclude = new Resource();
48+
resourceInclude.addInclude("config/*");
5149

52-
assert !FilePathUtils.isFilted(resource, "config/1.conf");
53-
assert !FilePathUtils.isFilted(resource, "config/a/1.conf");
54-
assert FilePathUtils.isFilted(resource, "bins/a/1.conf");
50+
assert !FilePathUtils.isFiltered(resourceInclude, "config/1.conf");
51+
assert !FilePathUtils.isFiltered(resourceInclude, "config/a/1.conf");
52+
assert FilePathUtils.isFiltered(resourceInclude, "bin/a/1.conf");
53+
assert FilePathUtils.isFiltered(resourceInclude, "2.conf");
5554

5655

56+
Resource resourceExclude = new Resource();
57+
resourceExclude.addExclude("bin/*");
5758

59+
assert FilePathUtils.isFiltered(resourceExclude, "bin/a/1.conf");
60+
61+
62+
Resource resourceExclude2 = new Resource();
63+
resourceExclude2.addInclude("*/*");
64+
resourceExclude2.addExclude("*/*");
65+
66+
assert FilePathUtils.isFiltered(resourceExclude2, "bin/a/1.conf");
5867
}
5968

6069
}

updiff-examples/updiff-examples-webapp/pom.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@
6666
- 其他则依赖比较文件sha-1值判断是否相等进行升级
6767
-->
6868
<extResources>
69-
<resource>src/main/webapp</resource>
69+
<resource>
70+
<directory>src/main/webapp</directory>
71+
<exclude>*/*.test</exclude>
72+
</resource>
7073
</extResources>
7174

7275
</configuration>

updiff-examples/updiff-examples-webapp/src/main/webapp/Exclude.test

Whitespace-only changes.

updiff-mvn-plugin/src/main/java/com/sand/updiff/mvnplugin/UpdiffMojo.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,25 +152,33 @@ public void execute () throws MojoExecutionException {
152152
newGitVersion,
153153
baseDir.getAbsolutePath());
154154

155-
List<File> sourceStructFiles = new ArrayList<File>();
156-
sourceStructFiles.add(sourceDirectory);
157-
sourceStructFiles.add(scriptSourceDirectory);
158-
sourceStructFiles.add(testSourceDirectory);
155+
List<Resource> resources = new ArrayList<Resource>();
156+
Resource sourceDirectoryResource = new Resource();
157+
sourceDirectoryResource.setDirectory(sourceDirectory.getAbsolutePath());
158+
resources.add(sourceDirectoryResource);
159+
160+
Resource scriptSourceDirectoryResource = new Resource();
161+
scriptSourceDirectoryResource.setDirectory(scriptSourceDirectory.getAbsolutePath());
162+
resources.add(scriptSourceDirectoryResource);
163+
164+
Resource testSourceDirectoryResource = new Resource();
165+
testSourceDirectoryResource.setDirectory(testSourceDirectory.getAbsolutePath());
166+
resources.add(testSourceDirectoryResource);
167+
159168
for (Resource resource: mainResources){
160-
sourceStructFiles.add(new File(resource.getDirectory()));
169+
resources.add(resource);
161170
}
162171
for (Resource resource: testResources){
163-
sourceStructFiles.add(new File(resource.getDirectory()));
172+
resources.add(resource);
164173
}
165174

166175
if(extResources != null){
167176
for(Resource resource: extResources){
168-
getLog().info("@@@@@@@@@@@@@@@@@@@" + resource.getDirectory());
169-
sourceStructFiles.add(new File(resource.getDirectory()));
177+
resources.add(resource);
170178
}
171179
}
172180

173-
List<DiffItem> diffs = gitRep.getDiffItems(sourceStructFiles);
181+
List<DiffItem> diffs = gitRep.getDiffItems(resources);
174182

175183
if(diffs != null && diffs.size() > 0){
176184
diffWriter = new DiffWriter(outputDif, finalName, packaging);

0 commit comments

Comments
 (0)