Physikerwelt has uploaded a new change for review.
https://gerrit.wikimedia.org/r/107802
Change subject: Share Git module between Vagrant and Wikimedia Labs
......................................................................
Share Git module between Vagrant and Wikimedia Labs
This change extends the Vagrant Git module with the functionality
of the labs module while preserving the vagrant defaults.
Bug: 59864
Change-Id: I37769c73fbf9411e3ac7fa1b299c4afd95c59b38
---
M puppet/modules/git/manifests/clone.pp
1 file changed, 109 insertions(+), 32 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant
refs/changes/02/107802/1
diff --git a/puppet/modules/git/manifests/clone.pp
b/puppet/modules/git/manifests/clone.pp
index e1d5036..704c7f0 100644
--- a/puppet/modules/git/manifests/clone.pp
+++ b/puppet/modules/git/manifests/clone.pp
@@ -1,46 +1,123 @@
-# == Define: git::clone
+
+# Definition: git::clone
#
-# Custom resource for cloning a remote git repository.
+# Creates a git clone of a specified origin into a top level directory.
#
-# === Parameters
+# === Required parameters
#
-# [*directory*]
-# Name for target directory for repository content. It should not
-# refer to an existing directory.
+# $+directory+:: path to clone the repository into.
#
-# [*branch*]
-# Name of branch to check out. Defaults to 'master'.
+# === Optional parameters
+# $+remote+:: Remote URL for the repository. If unspecified, the resource title
+# will be interpolated into $git::urlformat.
+# $+branch+:: Branch you would like to check out.
+# $+ensure+:: _absent_, _present_, or _latest_. Defaults to _present_.
+# - _present_ (default) will just clone once.
+# - _latest_ will execute a git pull if there are any changes.
+# - _absent_ will ensure the directory is deleted.
+# $+owner+:: Owner of $directory, default: _root_. git commands will be run
+# by this user.
+# $+group+:: Group owner of $directory, default: 'root'
+# $+mode+:: Permission mode of $directory, default: 0755
+# $+ssh+:: SSH command/wrapper to use when checking out, default: ''
+# $+timeout+:: Time out in seconds for the exec command, default: 300
#
-# [*remote*]
-# Remote URL for the repository. If unspecified, the resource title
-# will be interpolated into $git::urlformat.
+# === Example usage
#
-# === Examples
+# git::clone{ 'my_clone_name':
+# directory => '/path/to/clone/container',
+# origin => 'http://blabla.org/core.git',
+# branch => 'the_best_branch'
+# }
#
-# Clone VisualEditor to MediaWiki extension path:
-#
-# git::clone { 'extensions/VisualEditor':
-# directory => '/vagrant/mediawiki/extensions/VisualEditor',
-# }
-#
+# Will clone +http://blabla.org/core.git+ branch +the_best_branch+ at
+# +/path/to/clone/container/core+
define git::clone(
$directory,
- $branch = 'master',
- $remote = undef,
-) {
+ $remote=undef,
+ $branch='',
+ $ssh='',
+ $ensure='present',
+ $owner='vagrant',
+ $group='www-data',
+ $timeout='0',
+ $depth='full',
+ $mode=0755) {
include git
-
$url = $remote ? {
- undef => sprintf($git::urlformat, $title),
- default => $remote,
- }
+ undef => sprintf($git::urlformat, $title),
+ default => $remote,
+ }
- exec { "git clone ${title}":
- command => "git clone --recursive --branch ${branch} ${url}
${directory}",
- creates => "${directory}/.git",
- require => Package['git'],
- user => 'vagrant',
- environment => 'HOME=/home/vagrant',
- timeout => 0,
+
+ case $ensure {
+ 'absent': {
+ # make sure $directory does not exist
+ file { $directory:
+ ensure => 'absent',
+ recurse => true,
+ force => true,
+ }
+ }
+
+ # otherwise clone the repository
+ default: {
+ # if branch was specified
+ if $branch {
+ $brancharg = "-b $branch "
+ }
+ # else don't checkout a non-default branch
+ else {
+ $brancharg = ''
+ }
+ if $ssh {
+ $env = "GIT_SSH=$ssh"
+ }
+
+ $deptharg = $depth ? {
+ 'full' => '',
+ default => " --depth=$depth"
+ }
+
+ # set PATH for following execs
+ Exec { path => '/usr/bin:/bin' }
+ # clone the repository
+ exec { "git_clone_${title}":
+ command => "git clone ${brancharg}${url}${deptharg}
$directory",
+ logoutput => on_failure,
+ cwd => '/tmp',
+ environment => $env,
+ creates => "$directory/.git/config", #differenct to
vagrant version but should be ok
+ user => $owner,
+ group => $group,
+ timeout => $timeout,
+ require => Package['git'], #change due to vagrant
environment
+ }
+
+ if (!defined(File[$directory])) {
+ file { $directory:
+ ensure => 'directory',
+ mode => $mode,
+ owner => $owner,
+ group => $group,
+ require => Exec["git_clone_${title}"],
+ }
+ }
+
+ # pull if $ensure == latest and if there are changes to merge in.
+ if $ensure == 'latest' {
+ exec { "git_pull_${title}":
+ cwd => $directory,
+ command => "git pull --quiet${deptharg}",
+ logoutput => on_failure,
+ # git diff --quiet will exit 1 (return false)
+ # if there are differences
+ unless => 'git fetch && git diff --quiet
remotes/origin/HEAD',
+ user => $owner,
+ group => $group,
+ require => Exec["git_clone_${title}"],
+ }
+ }
+ }
}
}
--
To view, visit https://gerrit.wikimedia.org/r/107802
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I37769c73fbf9411e3ac7fa1b299c4afd95c59b38
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: Physikerwelt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits