Add mk libraries
Change-Id: I829b299b6329e8f4d4424c89717d432513d1eece
diff --git a/src/com/mirantis/mk/git.groovy b/src/com/mirantis/mk/git.groovy
new file mode 100644
index 0000000..411372d
--- /dev/null
+++ b/src/com/mirantis/mk/git.groovy
@@ -0,0 +1,89 @@
+package com.mirantis.mk
+
+/**
+ *
+ * Git functions
+ *
+ */
+
+/**
+ * Checkout single git repository
+ *
+ * @param path Directory to checkout repository to
+ * @param url Source Git repository URL
+ * @param branch Source Git repository branch
+ * @param credentialsId Credentials ID to use for source Git
+ */
+def checkoutGitRepository(path, url, branch, credentialsId = null){
+ checkout([
+ $class: 'GitSCM',
+ branches: [[name: "*/${branch}"]],
+ doGenerateSubmoduleConfigurations: false,
+ extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: path]],
+ submoduleCfg: [],
+ userRemoteConfigs: [[url: url, credentialsId: credentialsId]]
+ ])
+ dir(path) {
+ sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
+ }
+}
+
+/**
+ * Parse HEAD of current directory and return commit hash
+ */
+def getGitCommit() {
+ git_commit = sh (
+ script: 'git rev-parse HEAD',
+ returnStdout: true
+ ).trim()
+ return git_commit
+}
+
+/**
+ * Checkout git repositories in parallel
+ *
+ * @param path Directory to checkout to
+ * @param url Git repository url
+ * @param branch Git repository branch
+ * @param credentialsId Credentials ID to use
+ * @param poll Poll automatically
+ * @param clean Clean status
+ */
+def checkoutGitParallel(path, url, branch, credentialsId = null, poll = true, clean = true) {
+ return {
+ print "Checking out ${url}, branch ${branch} into ${path}"
+ dir(path) {
+ git url: url,
+ branch: branch,
+ credentialsId: credentialsId,
+ poll: poll,
+ clean: clean
+ }
+ }
+}
+
+/**
+ * Mirror git repository
+ */
+def mirrorReporitory(sourceUrl, targetUrl, credentialsId, branches, followTags = false, gitEmail = 'jenkins@localhost', gitUsername = 'Jenkins') {
+ def ssl = new com.mirantis.mk.ssl()
+ if (branches instanceof String) {
+ branches = branches.tokenize(',')
+ }
+ ssl.prepareSshAgentKey(credentialsId)
+ ssl.ensureKnownHosts(targetUrl)
+
+ sh "git remote | grep target || git remote add target ${TARGET_URL}"
+ agentSh "git remote update --prune"
+ for (i=0; i < branches.size; i++) {
+ branch = branches[i]
+ sh "git branch | grep ${branch} || git checkout -b ${branch} origin/${branch}"
+ sh "git branch | grep ${branch} && git checkout ${branch} && git reset --hard origin/${branch}"
+
+ sh "git config --global user.email '${gitEmail}'"
+ sh "git config --global user.name '${gitUsername}'"
+ sh "git ls-tree target/${branch} && git merge --no-edit --ff target/${branch} || echo 'Target repository is empty, skipping merge'"
+ followTagsArg = followTags ? "--follow-tags" : ""
+ agentSh "git push ${followTagsArg} target HEAD:${branch}"
+ }
+}