updateCmd = new String[] {
HgCommandConstants.UPDATE_CMD,
tag != null && !StringUtils.isEmpty( tag.getName() ) ? tag.getName() : "tip",
HgCommandConstants.CLEAN_OPTION };
}
ScmResult updateResult = HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), workingDir, updateCmd );
if ( !updateResult.isSuccess() )
{
return new UpdateScmResult( null, null, updateResult );
}
// Find changes from last revision
int currentRevision = HgUtils.getCurrentRevisionNumber( getLogger(), workingDir );
int previousRevision = currentRevision - 1;
String[] diffCmd = new String[] {
HgCommandConstants.DIFF_CMD,
HgCommandConstants.REVISION_OPTION,
"" + previousRevision };
HgDiffConsumer diffConsumer = new HgDiffConsumer( getLogger(), workingDir );
ScmResult diffResult = HgUtils.execute( diffConsumer, getLogger(), workingDir, diffCmd );
// Now translate between diff and update file status
List<ScmFile> updatedFiles = new ArrayList<ScmFile>();
List<CharSequence> changes = new ArrayList<CharSequence>();
List<ScmFile> diffFiles = diffConsumer.getChangedFiles();
Map<String, CharSequence> diffChanges = diffConsumer.getDifferences();
for ( ScmFile file : diffFiles )
{
changes.add( diffChanges.get( file.getPath() ) );
if ( file.getStatus() == ScmFileStatus.MODIFIED )
{
updatedFiles.add( new ScmFile( file.getPath(), ScmFileStatus.PATCHED ) );
}
else
{
updatedFiles.add( file );
}
}
if ( repo.isPushChanges() ) {
String[] hgUpdateCmd = new String[] { HgCommandConstants.UPDATE_CMD };
HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), workingDir, hgUpdateCmd );
}
return new UpdateScmResultWithRevision( updatedFiles, new ArrayList<ChangeSet>(0), String.valueOf( currentRevision ), diffResult );
}