dos2unix the readme
[puppet_vcsrepo.git] / README.markdown
1 #vcsrepo
2
3 ####Table of Contents
4
5 1. [Overview](#overview)
6 2. [Module Description - What the module does and why it is useful](#module-description)
7 3. [Setup - The basics of getting started with vcsrepo](#setup)
8     * [Setup requirements](#setup-requirements)
9     * [Beginning with vcsrepo](#beginning-with-vcsrepo)
10 4. [Usage - Configuration options and additional functionality](#usage)
11     * [Git](#git)
12     * [Bazaar](#bazaar)
13     * [CVS](#cvs)
14     * [Mercurial](#mercurial)
15     * [Perforce](#perforce)
16     * [Subversion](#subversion)  
17 5. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
18     * [Type: vcsrepo](#type-vcsrepo)
19         * [Providers](#providers)
20         * [Features](#features)
21         * [Parameters](#parameters)
22 5. [Limitations - OS compatibility, etc.](#limitations)
23 6. [Development - Guide for contributing to the module](#development)
24
25 ##Overview
26
27 The vcsrepo module lets you use Puppet to easily deploy content from your version control system (VCS).
28
29 ##Module Description
30
31 The vcsrepo module provides a single type with providers to support the following version control systems:
32
33 * [Git](#git)
34 * [Bazaar](#bazaar)
35 * [CVS](#cvs)
36 * [Mercurial](#mercurial)
37 * [Perforce](#perforce)
38 * [Subversion](#subversion)
39
40 **Note:** `git` is the only vcs provider officially [supported by Puppet Labs](https://forge.puppetlabs.com/supported).
41
42 ##Setup
43
44 ###Setup Requirements
45
46 The `vcsrepo` module does not install any VCS software for you. You must install a VCS before you can use this module.
47
48 Like Puppet in general, the `vcsrepo` module does not automatically create parent directories for the files it manages. Make sure to set up any needed directory structures before you get started.
49
50 ###Beginning with vcsrepo
51
52 To create and manage a blank repository, define the type `vcsrepo` with a path to your repository and supply the `provider` parameter based on the [VCS you're using](#usage).
53
54 ~~~
55 vcsrepo { '/path/to/repo':
56   ensure   => present,
57   provider => git,
58 }
59 ~~~
60
61 ##Usage
62
63 **Note:** `git` is the only vcsrepo provider officially [supported by Puppet Labs](https://forge.puppetlabs.com/supported).
64
65 ###Git
66
67 ####Create a blank repository
68
69 To create a blank repository, suitable for use as a central repository, define `vcsrepo` without `source` or `revision`:
70
71 ~~~
72 vcsrepo { '/path/to/repo':
73   ensure   => present,
74   provider => git,
75 }
76 ~~~
77
78 If you're managing a central or official repository, you might want to make it a bare repository. To do this, set `ensure` to 'bare':
79
80 ~~~
81 vcsrepo { '/path/to/repo':
82   ensure   => bare,
83   provider => git,
84 }
85 ~~~
86
87 ####Clone/pull a repository
88
89 ~~~
90 vcsrepo { '/path/to/repo':
91   ensure   => present,
92   provider => git,
93   source   => 'git://example.com/repo.git',
94 }
95 ~~~
96
97 By default, `vcsrepo` will use the HEAD of the source repository's master branch. To use another branch or a specific commit, set `revision` to either a branch name or a commit SHA or tag.
98
99 Branch name:
100
101 ~~~
102 vcsrepo { '/path/to/repo':
103   ensure   => present,
104   provider => git,
105   source   => 'git://example.com/repo.git',
106   revision => 'development',
107 }
108 ~~~
109
110 SHA:
111
112 ~~~
113 vcsrepo { '/path/to/repo':
114   ensure   => present,
115   provider => git,
116   source   => 'git://example.com/repo.git',
117   revision => '0c466b8a5a45f6cd7de82c08df2fb4ce1e920a31',
118 }
119 ~~~
120
121 Tag:
122
123 ~~~
124 vcsrepo { '/path/to/repo':
125   ensure   => present,
126   provider => git,
127   source   => 'git://example.com/repo.git',
128   revision => '1.1.2rc1',
129 }
130 ~~~
131
132 To check out a branch as a specific user, supply the `user` parameter:
133
134 ~~~
135 vcsrepo { '/path/to/repo':
136   ensure   => present,
137   provider => git,
138   source   => 'git://example.com/repo.git',
139   revision => '0c466b8a5a45f6cd7de82c08df2fb4ce1e920a31',
140   user     => 'someUser',
141 }
142 ~~~
143
144 To keep the repository at the latest revision, set `ensure` to 'latest'.
145
146 **WARNING:** this overwrites any local changes to the repository:
147
148 ~~~
149 vcsrepo { '/path/to/repo':
150   ensure   => latest,
151   provider => git,
152   source   => 'git://example.com/repo.git',
153   revision => 'master',
154 }
155 ~~~
156
157 To clone the repository but skip initializing submodules, set `submodules` to 'false':
158
159 ~~~
160 vcsrepo { '/path/to/repo':
161   ensure     => latest,
162   provider   => git,
163   source     => 'git://example.com/repo.git',
164   submodules => false,
165 }
166 ~~~
167
168 ####Use multiple remotes with a repository
169 In place of a single string, you can set `source` to a hash of one or more name => URL pairs:
170
171 ~~~
172 vcsrepo { '/path/to/repo':
173   ensure   => present,
174   provider => git,
175   remote   => 'origin'
176   source   => {
177     'origin'       => 'https://github.com/puppetlabs/puppetlabs-vcsrepo.git', 
178     'other_remote' => 'https://github.com/other_user/puppetlabs-vcsrepo.git'
179   },
180 }
181 ~~~
182
183 **Note:** if you set `source` to a hash, one of the names you specify must match the value of the `remote` parameter. That remote serves as the upstream of your managed repository.
184
185 ####Connect via SSH
186
187 To connect to your source repository via SSH (e.g., 'username@server:…'), we recommend managing your SSH keys with Puppet and using the [`require`](http://docs.puppetlabs.com/references/stable/metaparameter.html#require) metaparameter to make sure they are present before the `vcsrepo` resource is applied.
188
189 To use SSH keys associated with a user, specify the username in the `user` parameter:
190
191 ~~~
192 vcsrepo { '/path/to/repo':
193   ensure     => latest,
194   provider   => git,
195   source     => 'git://username@example.com/repo.git',
196   user       => 'toto', #uses toto's $HOME/.ssh setup
197   require    => File['/home/toto/.ssh/id_rsa'],
198 }
199 ~~~
200
201 ###Bazaar
202
203 ####Create a blank repository
204
205 To create a blank repository, suitable for use as a central repository, define `vcsrepo` without `source` or `revision`:
206
207 ~~~
208 vcsrepo { '/path/to/repo':
209   ensure   => present,
210   provider => bzr,
211 }
212 ~~~
213
214 ####Branch from an existing repository
215
216 ~~~
217 vcsrepo { '/path/to/repo':
218   ensure   => present,
219   provider => bzr,
220   source   => '/some/path',
221 }
222 ~~~
223
224 To branch from a specific revision, set `revision` to a valid [Bazaar revision spec](http://wiki.bazaar.canonical.com/BzrRevisionSpec):
225
226 ~~~
227 vcsrepo { '/path/to/repo':
228   ensure   => present,
229   provider => bzr,
230   source   => '/some/path',
231   revision => 'menesis@pov.lt-20100309191856-4wmfqzc803fj300x',
232 }
233 ~~~
234
235 ####Connect via SSH
236
237 To connect to your source repository via SSH (e.g., `'bzr+ssh://...'` or `'sftp://...,'`), we recommend using the [`require`](http://docs.puppetlabs.com/references/stable/metaparameter.html#require) metaparameter to make sure your SSH keys are present before the `vcsrepo` resource is applied:
238
239 ~~~
240 vcsrepo { '/path/to/repo':
241   ensure     => latest,
242   provider   => bzr,
243   source     => 'bzr+ssh://bzr.example.com/some/path',
244   user       => 'toto', #uses toto's $HOME/.ssh setup
245   require    => File['/home/toto/.ssh/id_rsa'],
246 }
247 ~~~
248
249 ###CVS
250
251 ####Create a blank repository
252
253 To create a blank repository, suitable for use as a central repository, define `vcsrepo` without `source` or `revision`:
254
255 ~~~
256 vcsrepo { '/path/to/repo':
257   ensure   => present,
258   provider => cvs,
259 }
260 ~~~
261
262 ####Checkout/update from a repository
263
264 ~~~
265 vcsrepo { '/path/to/workspace':
266   ensure   => present,
267   provider => cvs,
268   source   => ':pserver:anonymous@example.com:/sources/myproj',
269 }
270 ~~~
271
272 To get a specific module on the current mainline, supply the `module` parameter:
273
274 ~~~
275 vcsrepo {'/vagrant/lockss-daemon-source':
276   ensure   => present,
277   provider => cvs,
278   source   => ':pserver:anonymous@lockss.cvs.sourceforge.net:/cvsroot/lockss',
279   module   => 'lockss-daemon',
280 }
281 ~~~
282
283 To set the GZIP compression levels for your repository history, use the `compression` parameter:
284
285 ~~~
286 vcsrepo { '/path/to/workspace':
287   ensure      => present,
288   provider    => cvs,
289   compression => 3,
290   source      => ':pserver:anonymous@example.com:/sources/myproj',
291 }
292 ~~~
293
294 To get a specific revision, set `revision` to the revision number.
295
296 ~~~
297 vcsrepo { '/path/to/workspace':
298   ensure      => present,
299   provider    => cvs,
300   compression => 3,
301   source      => ':pserver:anonymous@example.com:/sources/myproj',
302   revision    => '1.2',
303 }
304 ~~~
305
306 You can also set `revision` to a tag:
307
308 ~~~
309 vcsrepo { '/path/to/workspace':
310   ensure      => present,
311   provider    => cvs,
312   compression => 3,
313   source      => ':pserver:anonymous@example.com:/sources/myproj',
314   revision    => 'SOMETAG',
315 }
316 ~~~
317
318 ####Connect via SSH
319
320 To connect to your source repository via SSH, we recommend using the [`require`](http://docs.puppetlabs.com/references/stable/metaparameter.html#require) metaparameter to make sure your SSH keys are present before the `vcsrepo` resource is applied:
321
322 ~~~
323 vcsrepo { '/path/to/repo':
324   ensure     => latest,
325   provider   => cvs,
326   source     => ':pserver:anonymous@example.com:/sources/myproj',
327   user       => 'toto', #uses toto's $HOME/.ssh setup
328   require    => File['/home/toto/.ssh/id_rsa'],
329 }
330 ~~~
331
332 ###Mercurial
333
334 ####Create a blank repository
335
336 To create a blank repository, suitable for use as a central repository, define `vcsrepo` without `source` or `revision`:
337
338 ~~~
339 vcsrepo { '/path/to/repo':
340   ensure   => present,
341   provider => hg,
342 }
343 ~~~
344
345 ####Clone/pull & update a repository
346
347 To get the default branch tip:
348
349 ~~~
350 vcsrepo { '/path/to/repo':
351   ensure   => present,
352   provider => hg,
353   source   => 'http://hg.example.com/myrepo',
354 }
355 ~~~
356
357 For a specific changeset, use `revision`:
358
359 ~~~
360 vcsrepo { '/path/to/repo':
361   ensure   => present,
362   provider => hg,
363   source   => 'http://hg.example.com/myrepo',
364   revision => '21ea4598c962',
365 }
366 ~~~
367
368 You can also set `revision` to a tag:
369
370 ~~~
371 vcsrepo { '/path/to/repo':
372   ensure   => present,
373   provider => hg,
374   source   => 'http://hg.example.com/myrepo',
375   revision => '1.1.2',
376 }
377 ~~~
378
379 To check out as a specific user:
380
381 ~~~
382 vcsrepo { '/path/to/repo':
383   ensure   => present,
384   provider => hg,
385   source   => 'http://hg.example.com/myrepo',
386   user     => 'user',
387 }
388 ~~~
389
390 To specify an SSH identity key:
391
392 ~~~
393 vcsrepo { '/path/to/repo':
394   ensure   => present,
395   provider => hg,
396   source   => 'ssh://hg@hg.example.com/myrepo',
397   identity => '/home/user/.ssh/id_dsa1,
398 }
399 ~~~
400
401 To specify a username and password for HTTP Basic authentication:
402
403 ~~~
404 vcsrepo { '/path/to/repo':
405   ensure   => latest,
406   provider => hg,
407   source   => 'http://hg.example.com/myrepo',
408   basic_auth_username => 'hgusername',
409   basic_auth_password => 'hgpassword',
410 }
411 ~~~
412
413 ####Connect via SSH 
414
415 To connect to your source repository via SSH (e.g., `'ssh://...'`), we recommend using the [`require` metaparameter](http://docs.puppetlabs.com/references/stable/metaparameter.html#require) to make sure your SSH keys are present before the `vcsrepo` resource is applied:
416
417 ~~~
418 vcsrepo { '/path/to/repo':
419   ensure     => latest,
420   provider   => hg,
421   source     => 'ssh://hg.example.com//path/to/myrepo',
422   user       => 'toto', #uses toto's $HOME/.ssh setup
423   require    => File['/home/toto/.ssh/id_rsa'],
424 }
425 ~~~
426
427 ###Perforce
428
429 ####Create an empty workspace
430
431 To set up the connection to your Perforce service, set `p4config` to the location of a valid Perforce [config file](http://www.perforce.com/perforce/doc.current/manuals/p4guide/chapter.configuration.html#configuration.settings.configfiles) stored on the node: 
432
433 ~~~
434 vcsrepo { '/path/to/repo':
435   ensure     => present,
436   provider   => p4,
437   p4config   => '/root/.p4config'
438 }
439 ~~~
440
441 **Note:** If you don't include the `P4CLIENT` setting in your config file, the provider generates a workspace name based on the digest of `path` and the node's hostname (e.g., `puppet-91bc00640c4e5a17787286acbe2c021c`):
442
443 ####Create/update and sync a Perforce workspace
444
445 To sync a depot path to head, set `ensure` to 'latest':
446
447 ~~~
448 vcsrepo { '/path/to/repo':
449   ensure   => latest,
450   provider => p4,
451   source   => '//depot/branch/...'
452 }
453 ~~~
454
455 To sync to a specific changelist, specify its revision number with the `revision` parameter:
456
457 ~~~
458 vcsrepo { '/path/to/repo':
459   ensure   => present,
460   provider => p4,
461   source   => '//depot/branch/...',
462   revision => '2341'
463 }
464 ~~~
465
466 You can also set `revision` to a label:
467
468 ~~~
469 vcsrepo { '/path/to/repo':
470   ensure   => present,
471   provider => p4,
472   source   => '//depot/branch/...',
473   revision => 'my_label'
474 }
475 ~~~
476
477 ###Subversion
478
479 ####Create a blank repository
480
481 ~~~
482 vcsrepo { '/path/to/repo':
483   ensure   => present,
484   provider => svn,
485 }
486 ~~~
487
488 ####Check out from an existing repository
489
490 Provide a `source` pointing to the branch or tag you want to check out:
491
492 ~~~
493 vcsrepo { '/path/to/repo':
494   ensure   => present,
495   provider => svn,
496   source   => 'svn://svnrepo/hello/branches/foo',
497 }
498 ~~~
499
500 You can also designate a specific revision:
501
502 ~~~
503 vcsrepo { '/path/to/repo':
504   ensure   => present,
505   provider => svn,
506   source   => 'svn://svnrepo/hello/branches/foo',
507   revision => '1234',
508 }
509 ~~~
510
511 ####Use a specific Subversion configuration directory 
512
513 Use the `configuration` parameter to designate the directory that contains your Subversion configuration files (typically, '/path/to/.subversion'):
514
515 ~~~
516 vcsrepo { '/path/to/repo':
517   ensure        => present,
518   provider      => svn,
519   source        => 'svn://svnrepo/hello/branches/foo',
520   configuration => '/path/to/.subversion',
521 }
522 ~~~
523
524 ####Connect via SSH 
525
526 To connect to your source repository via SSH (e.g., `'svn+ssh://...'`), we recommend using the [`require` metaparameter](http://docs.puppetlabs.com/references/stable/metaparameter.html#require) to make sure your SSH keys are present before the `vcsrepo` resource is applied:
527
528 ~~~
529 vcsrepo { '/path/to/repo':
530   ensure     => latest,
531   provider   => svn,
532   source     => 'svn+ssh://svnrepo/hello/branches/foo',
533   user       => 'toto', #uses toto's $HOME/.ssh setup
534   require    => File['/home/toto/.ssh/id_rsa'],
535 }
536 ~~~
537
538 ##Reference
539
540 ###Type: vcsrepo
541
542 The vcsrepo module adds only one type with several providers. Each provider abstracts a different VCS, and each provider includes a set of features according to its needs.
543
544 ####Providers
545
546 **Note:** Not all features are available with all providers.
547
548 #####`git` - Supports the Git VCS.
549
550 Features: `bare_repositories`, `depth`, `multiple_remotes`, `reference_tracking`, `ssh_identity`, `submodules`, `user`
551
552 Parameters: `depth`, `ensure`, `excludes`, `force`, `group`, `identity`, `owner`, `path`, `provider`, `remote`, `revision`, `source`, `user`
553
554 #####`bzr` - Supports the Bazaar VCS.
555
556 Features: `reference_tracking`
557
558 Parameters: `ensure`, `excludes`, `force`, `group`, `owner`, `path`, `provider`, `revision`, `source`
559
560 #####`cvs` - Supports the CVS VCS.
561
562 Features: `cvs_rsh`, `gzip_compression`, `modules`, `reference_tracking`, `user`
563
564 Parameters: `compression`, `cvs_rsh`, `ensure`, `excludes`, `force`, `group`, `module`, `owner`, `path`, `provider`
565
566 #####`hg` - Supports the Mercurial VCS.
567
568 Features: `reference_tracking`, `ssh_identity`, `user`
569
570 Parameters: `ensure`, `excludes`, `force`, `group`, `identity`, `owner`, `path`, `provider`, `revision`, `source`, `user`
571
572 #####`p4` - Supports the Perforce VCS.
573
574 Features: `p4config`, `reference_tracking`
575
576 Parameters: `ensure`, `excludes`, `force`, `group`, `owner`, `p4config`, `path`, `provider`, `revision`, `source`
577
578 #####`svn` - Supports the Subversion VCS.
579
580 Features: `basic_auth`, `configuration`, `conflict`, `depth`, `filesystem_types`, `reference_tracking`
581
582 Parameters: `basic_auth_password`, `basic_auth_username`, `configuration`, `conflict`, `ensure`, `excludes`, `force`, `fstype`, `group`, `owner`, `path`, `provider`, `revision`, `source`, `trust_server_cert`
583
584 ####Features
585
586 **Note:** Not all features are available with all providers.
587
588 * `bare_repositories` - Differentiates between bare repositories and those with working copies. (Available with `git`.)
589 * `basic_auth` -  Supports HTTP Basic authentication. (Available with `svn`.)
590 * `conflict` - Lets you decide how to resolve any conflicts between the source repository and your working copy. (Available with `svn`.)
591 * `configuration` - Lets you specify the location of your configuration files. (Available with `svn`.)
592 * `cvs_rsh` - Understands the `CVS_RSH` environment variable. (Available with `cvs`.)
593 * `depth` - Supports shallow clones in `git` or sets scope limit in `svn`. (Available with `git` and `svn`.)
594 * `filesystem_types` - Supports multiple types of filesystem. (Available with `svn`.)
595 * `gzip_compression` - Supports explicit GZip compression levels. (Available with `cvs`.)
596 * `modules` - Lets you choose a specific repository module. (Available with `cvs`.)
597 * `multiple_remotes` - Tracks multiple remote repositories. (Available with `git`.)
598 * `reference_tracking` - Lets you track revision references that can change over time (e.g., some VCS tags and branch names). (Available with all providers)
599 * `ssh_identity` - Lets you specify an SSH identity file. (Available with `git` and `hg`.)
600 * `user` - Can run as a different user. (Available with `git`, `hg` and `cvs`.)
601 * `p4config` - Supports setting the `P4CONFIG` environment. (Available with `p4`.)
602 * `submodules` - Supports repository submodules which can be optionally initialized. (Available with `git`.)
603
604 ####Parameters
605
606 All parameters are optional, except where specified otherwise.
607
608 ##### `basic_auth_password`
609
610 Specifies the password for HTTP Basic authentication. (Requires the `basic_auth` feature.) Valid options: a string. Default: none. 
611
612 ##### `basic_auth_username`
613
614 Specifies the username for HTTP Basic authentication. (Requires the `basic_auth` feature.) Valid options: a string. Default: none. 
615
616 ##### `compression`
617
618 Sets the GZIP compression level for the repository history. (Requires the `gzip_compression` feature.) Valid options: an integer between 0 and 6. Default: none. 
619
620 ##### `configuration`
621
622 Sets the configuration directory to use. (Requires the `configuration` feature.) Valid options: a string containing an absolute path. Default: none. 
623
624 ##### `conflict`
625
626 Tells Subversion how to resolve any conflicts between the source repository and your working copy. (Requires the `conflict` feature.) Valid options: 'base', 'mine-full', 'theirs-full', and 'working'. Default: none. 
627
628 ##### `cvs_rsh`
629
630 Provides a value for the `CVS_RSH` environment variable. (Requires the `cvs_rsh` feature.) Valid options: a string. Default: none. 
631
632 ##### `depth`
633
634 In `git` sets the number of commits to include when creating a shallow clone. (Requires the `depth` feature.) Valid options: an integer. Default: none. 
635
636 In `svn` instructs Subversion to limit the scope of an operation to a particular tree depth. (Requires the `depth` feature.) Valid options: 'empty', 'files', 'immediates', 'infinity'. Default: none. 
637
638 ##### `ensure`
639
640 Specifies whether the repository should exist. Valid options: 'present', 'bare', 'absent', and 'latest'. Default: 'present'. 
641
642 ##### `excludes`
643
644 Lists any files the repository shouldn't track (similar to .gitignore). Valid options: a string (separate multiple values with the newline character). Default: none. 
645
646 ##### `force`
647
648 Specifies whether to delete any existing files in the repository path if creating a new repository. **Use with care.** Valid options: 'true' and 'false'. Default: 'false'. 
649
650 ##### `fstype`
651
652 Sets the filesystem type. (Requires the `filesystem_types` feature.) Valid options: 'fsfs' or 'bdb'. Default: none. 
653
654 ##### `group`
655
656 Specifies a group to own the repository files. Valid options: a string containing a group name or GID. Default: none. 
657
658 ##### `identity`
659
660 Specifies an identity file to use for SSH authentication. (Requires the `ssh_identity` feature.) Valid options: a string containing an absolute path. Default: none. 
661
662 ##### `module`
663
664 Specifies the repository module to manage. (Requires the `modules` feature.) Valid options: a string containing the name of a CVS module. Default: none. 
665
666 ##### `owner`
667
668 Specifies a user to own the repository files. Valid options: a string containing a username or UID. Default: none. 
669
670 ##### `p4config`
671
672 Specifies a config file that contains settings for connecting to the Perforce service. (Requires the `p4config` feature.) Valid options: a string containing the absolute path to a valid [Perforce config file](http://www.perforce.com/perforce/doc.current/manuals/p4guide/chapter.configuration.html#configuration.settings.configfiles). Default: none. 
673
674 ##### `path`
675
676 Specifies a location for the managed repository. Valid options: a string containing an absolute path. Default: the title of your declared resource. 
677
678 ##### `provider`
679
680 *Required.* Specifies the backend to use for this vcsrepo resource. Valid options: 'bzr', 'cvs', 'git', 'hg', 'p4', and 'svn'. 
681
682 ##### `remote`
683
684 Specifies the remote repository to track. (Requires the `multiple_remotes` feature.) Valid options: a string containing one of the remote names specified in `source`. Default: 'origin'. 
685
686 ##### `revision`
687
688 Sets the revision of the repository. Valid options vary by provider:
689
690 * `git` - a string containing a Git branch name, or a commit SHA or tag
691 * `bzr` - a string containing a Bazaar [revision spec](http://wiki.bazaar.canonical.com/BzrRevisionSpec)
692 * `cvs` - a string containing a CVS [tag or revision number](http://www.thathost.com/wincvs-howto/cvsdoc/cvs_4.html)
693 * `hg` - a string containing a Mercurial [changeset ID](http://mercurial.selenic.com/wiki/ChangeSetID) or [tag](http://mercurial.selenic.com/wiki/Tag)
694 * `p4` - a string containing a Perforce [change number, label name, client name, or date spec](http://www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html)
695 * `svn` - a string containing a Subversion [revision number](http://svnbook.red-bean.com/en/1.7/svn.basic.in-action.html#svn.basic.in-action.revs), [revision keyword, or revision date](http://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)
696
697 Default: none. 
698
699 ##### `source`
700
701 Specifies a source repository to serve as the upstream for your managed repository. Default: none. Valid options vary by provider:
702
703 * `git` - a string containing a [Git repository URL](https://www.kernel.org/pub/software/scm/git/docs/git-clone.html#_git_urls_a_id_urls_a) or a hash of name => URL mappings. See also [`remote`](#remote).
704 * `bzr` - a string containing a Bazaar branch location
705 * `cvs` - a string containing a CVS root
706 * `hg` - a string containing the local path or URL of a Mercurial repository
707 * `p4` - a string containing a Perforce depot path
708 * `svn` - a string containing a Subversion repository URL
709
710 Default: none. 
711
712 ##### `submodules`
713
714 Specifies whether to initialize and update each submodule in the repository. (Requires the `submodules` feature.) Valid options: 'true' and 'false'. Default: 'true'. 
715
716 ##### `trust_server_cert`
717
718 Instructs Subversion to accept SSL server certificates issued by unknown certificate authorities. Valid options: 'true' and 'false'. Default: 'false'. 
719
720 ##### `user`
721
722 Specifies the user to run as for repository operations. (Requires the `user` feature.) Valid options: a string containing a username or UID. Default: none.
723
724 ##Limitations
725
726 Git is the only VCS provider officially [supported](https://forge.puppetlabs.com/supported) by Puppet Labs.
727
728 This module has been tested with Puppet 2.7 and higher.
729
730 The module has been tested on:
731
732 * CentOS 5/6/7
733 * Debian 6/7
734 * Oracle 5/6/7
735 * Red Hat Enterprise Linux 5/6/7
736 * Scientific Linux 5/6/7
737 * SLES 10/11/12
738 * Ubuntu 10.04/12.04/14.04
739
740 Testing on other platforms has been light and cannot be guaranteed.
741
742 ##Development
743
744 Puppet Labs modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We can't access the huge number of platforms and myriad of hardware, software, and deployment configurations that Puppet is intended to serve.
745
746 We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things.
747
748 You can read the complete module contribution guide [on the Puppet Labs wiki.](http://projects.puppetlabs.com/projects/module-site/wiki/Module_contributing)