in maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/checkin/LocalCheckInCommand.java [46:127]
protected CheckInScmResult executeCheckInCommand(
ScmProviderRepository repo, ScmFileSet fileSet, String message, ScmVersion version) throws ScmException {
LocalScmProviderRepository repository = (LocalScmProviderRepository) repo;
if (version != null && StringUtils.isNotEmpty(version.getName())) {
throw new ScmException("The local scm doesn't support tags.");
}
File root = new File(repository.getRoot());
String module = repository.getModule();
File source = new File(root, module);
File basedir = fileSet.getBasedir();
if (!basedir.exists()) {
throw new ScmException("The working directory doesn't exist (" + basedir.getAbsolutePath() + ").");
}
if (!root.exists()) {
throw new ScmException("The base directory doesn't exist (" + root.getAbsolutePath() + ").");
}
if (!source.exists()) {
throw new ScmException("The module directory doesn't exist (" + source.getAbsolutePath() + ").");
}
List<ScmFile> checkedInFiles = new ArrayList<>();
try {
// Only copy files newer than in the repo
File repoRoot = new File(repository.getRoot(), repository.getModule());
List<File> files = fileSet.getFileList();
if (files.isEmpty()) {
files = FileUtils.getFiles(basedir, "**", null, false);
}
for (File file : files) {
String path = FilenameUtils.normalizeFilename(file.getPath());
File repoFile = new File(repoRoot, path);
file = new File(basedir, path);
ScmFileStatus status;
if (repoFile.exists()) {
String repoFileContents = FileUtils.fileRead(repoFile);
String fileContents = FileUtils.fileRead(file);
if (logger.isDebugEnabled()) {
logger.debug("fileContents:" + fileContents);
logger.debug("repoFileContents:" + repoFileContents);
}
if (fileContents.equals(repoFileContents)) {
continue;
}
status = ScmFileStatus.CHECKED_IN;
} else if (repository.isFileAdded(path)) {
status = ScmFileStatus.CHECKED_IN;
} else {
if (logger.isWarnEnabled()) {
logger.warn("skipped unknown file in checkin:" + path);
}
// unknown file, skip
continue;
}
FileUtils.copyFile(file, repoFile);
ScmFile scmFile = new ScmFile(path, status);
logger.info(scmFile.toString());
checkedInFiles.add(scmFile);
}
} catch (IOException ex) {
throw new ScmException("Error while checking in the files.", ex);
}
return new CheckInScmResult(null, checkedInFiles);
}