Improve Gerrit checkout functions

- Added proper merge option to main gerrit checkout function.
- Renamed existing "merge" option to "localBranch"
- Added extraScmExtensions optional param.

Change-Id: Ie872ff8e46d878d0f2e963711e585fce98b82bb7
diff --git a/src/com/mirantis/mk/Gerrit.groovy b/src/com/mirantis/mk/Gerrit.groovy
index ad8ed52..34434bc 100644
--- a/src/com/mirantis/mk/Gerrit.groovy
+++ b/src/com/mirantis/mk/Gerrit.groovy
@@ -12,8 +12,11 @@
  * @param config LinkedHashMap
  *        config includes next parameters:
  *          - credentialsId, id of user which should make checkout
- *          - withMerge, prevent detached mode in repo
+ *          - withMerge, merge master before build
+ *          - withLocalBranch, prevent detached mode in repo
  *          - withWipeOut, wipe repository and force clone
+ *        Gerrit properties like GERRIT_SCHEMA can be passed in config as gerritSchema or will be obtained from env
+ * @param extraScmExtensions list of extra scm extensions which will be used for checkout (optional)
  * @return boolean result
  *
  * Usage example:
@@ -29,9 +32,10 @@
  *   withMerge : true
  * ])
  */
-def gerritPatchsetCheckout(LinkedHashMap config) {
+def gerritPatchsetCheckout(LinkedHashMap config, List extraScmExtensions = []) {
     def merge = config.get('withMerge', false)
     def wipe = config.get('withWipeOut', false)
+    def localBranch = config.get('withLocalBranch', false)
     def credentials = config.get('credentialsId','')
     def gerritScheme = config.get('gerritScheme', env["GERRIT_SCHEME"] ? env["GERRIT_SCHEME"] : "")
     def gerritRefSpec = config.get('gerritRefSpec', env["GERRIT_REFSPEC"] ? env["GERRIT_REFSPEC"] : "")
@@ -70,13 +74,20 @@
 
         // if we need to "merge" code from patchset to GERRIT_BRANCH branch
         if (merge) {
-            scmExtensions.add([$class: 'LocalBranch', localBranch: "${gerritBranch}"])
+            scmExtensions.add([$class: 'PreBuildMerge', options: [fastForwardMode: 'FF', mergeRemote: 'gerrit', mergeStrategy: 'default', mergeTarget: gerritBranch]])
         }
         // we need wipe workspace before checkout
         if (wipe) {
             scmExtensions.add([$class: 'WipeWorkspace'])
         }
 
+        if(localBranch){
+            scmExtensions.add([$class: 'LocalBranch', localBranch: gerritBranch])
+        }
+
+        if(!extraScmExtensions.isEmpty()){
+            scmExtensions.addAll(extraScmExtensions)
+        }
         if (path == "") {
             checkout(
                 scm: [