Skip to content

Commit aabe49b

Browse files
zilmTTmnencia
authored andcommitted
Fix hierarchy deletion issues (JENKINS-26652)
Before deleting the job hierarchy it is needed to check for changes on the files, e.g config.xml. While deleting a job it gets updated, this blocks the git -rm command from deleting this hierarchy. Commits should always come with proper messages, git command fails if the commit message is empty. Which put scm-sync in an dirty state if there are commits which cannot be pushed.
1 parent dc4043b commit aabe49b

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/main/java/hudson/plugins/scm_sync_configuration/SCMManipulator.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.apache.maven.scm.command.checkin.CheckInScmResult;
1010
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
1111
import org.apache.maven.scm.command.remove.RemoveScmResult;
12+
import org.apache.maven.scm.command.status.StatusScmResult;
1213
import org.apache.maven.scm.command.update.UpdateScmResult;
1314
import org.apache.maven.scm.manager.NoSuchScmProviderException;
1415
import org.apache.maven.scm.manager.ScmManager;
@@ -18,6 +19,7 @@
1819
import java.io.IOException;
1920
import java.util.ArrayList;
2021
import java.util.Arrays;
22+
import java.util.Iterator;
2123
import java.util.List;
2224
import java.util.logging.Level;
2325
import java.util.logging.Logger;
@@ -124,7 +126,17 @@ public List<File> deleteHierarchy(File hierarchyToDelete){
124126

125127
try {
126128
ScmFileSet deleteFileSet = new ScmFileSet(enclosingDirectory, hierarchyToDelete);
127-
RemoveScmResult removeResult = this.scmManager.remove(this.scmRepository, deleteFileSet, "");
129+
StatusScmResult checkForChanges = this.scmManager.status(scmRepository, deleteFileSet);
130+
LOGGER.fine("Checking for changes on SCM hierarchy ["+hierarchyToDelete.getAbsolutePath()+"] from SCM ...");
131+
for (ScmFile changedFile : checkForChanges.getChangedFiles()) {
132+
//check in this change as it affect our hierarchy
133+
LOGGER.fine("[checkForChanges] Found changed file "+changedFile.toString()+", try to check-in...");
134+
CheckInScmResult checkedInChangedFile = scmManager.checkIn(scmRepository, new ScmFileSet(enclosingDirectory.getParentFile(), new File(changedFile.getPath())), "Check-In changes for "+changedFile.getPath());
135+
if(!checkedInChangedFile.isSuccess()){
136+
LOGGER.severe("[checkForChanges] Failed to check-in changed file ["+changedFile.getPath()+"]: "+checkedInChangedFile.getProviderMessage());
137+
}
138+
}
139+
RemoveScmResult removeResult = this.scmManager.remove(this.scmRepository, deleteFileSet, "Delete hierarchy "+hierarchyToDelete.getPath());
128140
if(!removeResult.isSuccess()){
129141
LOGGER.severe("[deleteHierarchy] Problem during remove : "+removeResult.getProviderMessage());
130142
return null;

0 commit comments

Comments
 (0)