[SCM-631] Mercurial SCM provider works with repository like centralized SCM's do
Submitted by Alexander Betaev.
Patch applyed with modifications due to some changes applyed before.

git-svn-id: https://svn.apache.org/repos/asf/maven/scm/trunk@1207290 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
index 024ca93..37676a3 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
@@ -34,6 +34,7 @@
 
     private HgCommandConstants()
     {
+        // no o
     }
 
     /**
@@ -145,5 +146,6 @@
 
     public static final String NEW_BRANCH_OPTION = "--new-branch";
 
+    public static final String CLEAN_OPTION = "-c";
 
 }
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
index c46c1ab..09e1793 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
@@ -207,7 +207,7 @@
                 currentChange.addFile( changeFile );
             }
         }
-        else
+        else if ( line.length() > 0 )
         {
             if ( getLogger().isWarnEnabled() )
             {
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkin/HgCheckInCommand.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkin/HgCheckInCommand.java
index 6a9836a..9957fbd 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkin/HgCheckInCommand.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkin/HgCheckInCommand.java
@@ -63,7 +63,7 @@
 
         File workingDir = fileSet.getBasedir();
         String branchName = HgUtils.getCurrentBranchName( getLogger(), workingDir );
-        boolean differentOutgoingBranch = HgUtils.differentOutgoingBranchFound( getLogger(), workingDir, branchName );
+        boolean differentOutgoingBranch = repo.isPushChanges() ? HgUtils.differentOutgoingBranchFound( getLogger(), workingDir, branchName ) : false;
 
         // Get files that will be committed (if not specified in fileSet)
         List<ScmFile> commitedFiles = new ArrayList<ScmFile>();
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java
index a98c2e2..8151ad2 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java
@@ -74,12 +74,23 @@
 
         // Do the actual checkout
         List<String> cmdList = new ArrayList<String>();
-        cmdList.add( HgCommandConstants.CLONE_CMD );
+        if ( repo.isPushChanges() )
+        {
+            cmdList.add( HgCommandConstants.CLONE_CMD );
+        }
+        else
+        {
+            cmdList.add( HgCommandConstants.UPDATE_CMD );
+        }
         if ( scmVersion != null && !StringUtils.isEmpty( scmVersion.getName() ) )
         {
             cmdList.add( HgCommandConstants.REVISION_OPTION );
             cmdList.add( scmVersion.getName() );
         }
+        if ( !repo.isPushChanges() )
+        {
+            cmdList.add( HgCommandConstants.CLEAN_OPTION );
+        }
         cmdList.add( url );
         cmdList.add( checkoutDir.getAbsolutePath() );
         String[] checkoutCmd = cmdList.toArray( new String[0] );
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/update/HgUpdateCommand.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/update/HgUpdateCommand.java
index 73248ee..508f078 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/update/HgUpdateCommand.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/update/HgUpdateCommand.java
@@ -59,11 +59,19 @@
     {
         File workingDir = fileSet.getBasedir();
 
+        String[] updateCmd;
         // Update branch
-        String[] updateCmd = new String[] {
-            HgCommandConstants.PULL_CMD,
-            HgCommandConstants.REVISION_OPTION,
-            tag != null && !StringUtils.isEmpty( tag.getName() ) ? tag.getName() : "tip" };
+        if (repo.isPushChanges()) {
+            updateCmd = new String[] {
+                    HgCommandConstants.PULL_CMD,
+                    HgCommandConstants.REVISION_OPTION,
+                    tag != null && !StringUtils.isEmpty( tag.getName() ) ? tag.getName() : "tip" };
+        } else {
+            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() )
@@ -99,8 +107,10 @@
             }
         }
         
-        String[] hgUpdateCmd = new String[] { HgCommandConstants.UPDATE_CMD };
-        HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), workingDir, hgUpdateCmd );
+        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 );
     }