Support Mercurial tags, restructure examples
This commit is contained in:
		@@ -7,7 +7,7 @@ To create a blank repository
 | 
			
		||||
Define a `vcsrepo` without a `source` or `revision`:
 | 
			
		||||
 | 
			
		||||
    vcsrepo { "/path/to/repo":
 | 
			
		||||
      ensure => present,
 | 
			
		||||
      ensure   => present,
 | 
			
		||||
      provider => hg
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -17,16 +17,25 @@ To clone/pull & update a repository
 | 
			
		||||
To get the default branch tip:
 | 
			
		||||
 | 
			
		||||
    vcsrepo { "/path/to/repo":
 | 
			
		||||
        ensure => present,
 | 
			
		||||
        ensure   => present,
 | 
			
		||||
        provider => hg,
 | 
			
		||||
        source => "http://hg.example.com/myrepo"
 | 
			
		||||
        source   => "http://hg.example.com/myrepo"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
For a specific changeset, use `revision`:
 | 
			
		||||
 | 
			
		||||
    vcsrepo { "/path/to/repo":
 | 
			
		||||
        ensure => present,
 | 
			
		||||
        ensure   => present,
 | 
			
		||||
        provider => hg,
 | 
			
		||||
        source => "http://hg.example.com/myrepo"
 | 
			
		||||
        source   => "http://hg.example.com/myrepo"
 | 
			
		||||
        revision => '21ea4598c962'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
You can also set `revision` to a tag:
 | 
			
		||||
 | 
			
		||||
    vcsrepo { "/path/to/repo":
 | 
			
		||||
        ensure   => present,
 | 
			
		||||
        provider => hg,
 | 
			
		||||
        source   => "http://hg.example.com/myrepo"
 | 
			
		||||
        revision => '1.1.2'
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,9 +9,3 @@ vcsrepo { "/tmp/vcstest-cvs-workspace-local":
 | 
			
		||||
  source => "/tmp/vcstest-cvs-repo",
 | 
			
		||||
  require => Vcsrepo["/tmp/vcstest-cvs-repo"]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
vcsrepo { "/tmp/vcstest-cvs-workspace-remote":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => cvs,
 | 
			
		||||
  source => ":pserver:anonymous@cvs.sv.gnu.org:/sources/leetcvrt"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								examples/cvs/remote.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								examples/cvs/remote.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-cvs-workspace-remote":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => cvs,
 | 
			
		||||
  source => ":pserver:anonymous@cvs.sv.gnu.org:/sources/leetcvrt"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								examples/git/bare_init.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								examples/git/bare_init.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-git-bare":
 | 
			
		||||
  ensure => bare,
 | 
			
		||||
  provider => git
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								examples/git/clone.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								examples/git/clone.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-git-clone":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => git,
 | 
			
		||||
  source => "git://github.com/bruce/rtex.git"
 | 
			
		||||
} 
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-git-bare":
 | 
			
		||||
  ensure => bare,
 | 
			
		||||
  provider => git
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
vcsrepo { "/tmp/vcstest-git-wc":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => git
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
vcsrepo { "/tmp/vcstest-git-clone":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => git,
 | 
			
		||||
  source => "git://github.com/bruce/rtex.git"
 | 
			
		||||
} 
 | 
			
		||||
							
								
								
									
										4
									
								
								examples/git/working_copy_init.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								examples/git/working_copy_init.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-git-wc":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => git
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								examples/hg/clone.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								examples/hg/clone.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-hg-clone":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => hg,
 | 
			
		||||
  source => "http://hg.basho.com/riak",
 | 
			
		||||
  revision => 'riak-0.5.3'
 | 
			
		||||
} 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-hg-init":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => hg
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
vcsrepo { "/tmp/vcstest-hg-clone":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => hg,
 | 
			
		||||
  source => "http://hg.basho.com/riak/",
 | 
			
		||||
  revision => '34e6012c783a'
 | 
			
		||||
} 
 | 
			
		||||
							
								
								
									
										4
									
								
								examples/hg/init_repo.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								examples/hg/init_repo.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-hg-init":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => hg
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								examples/svn/checkout.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								examples/svn/checkout.pp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
vcsrepo { "/tmp/vcstest-svn-checkout":
 | 
			
		||||
  ensure => present,
 | 
			
		||||
  provider => svn,
 | 
			
		||||
  source => 'http://svn.edgewall.org/repos/babel/trunk'
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
@@ -24,7 +24,24 @@ Puppet::Type.type(:vcsrepo).provide(:hg, :parent => Puppet::Provider::Vcsrepo) d
 | 
			
		||||
  
 | 
			
		||||
  def revision
 | 
			
		||||
    at_path do
 | 
			
		||||
      hg('parents')[/^changeset:\s+(?:-?\d+):(\S+)/m, 1]
 | 
			
		||||
      current = hg('parents')[/^changeset:\s+(?:-?\d+):(\S+)/m, 1]
 | 
			
		||||
      desired = @resource.value(:revision)
 | 
			
		||||
      if current == desired
 | 
			
		||||
        current
 | 
			
		||||
      else
 | 
			
		||||
        mapped = hg('tags')[/^#{Regexp.quote(desired)}\s+\d+:(\S+)/m, 1]
 | 
			
		||||
        if mapped
 | 
			
		||||
          # A tag, return that tag if it maps to the current nodeid
 | 
			
		||||
          if current == mapped
 | 
			
		||||
            desired
 | 
			
		||||
          else
 | 
			
		||||
            current
 | 
			
		||||
          end
 | 
			
		||||
        else
 | 
			
		||||
          # Use the current nodeid
 | 
			
		||||
          current
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								spec/fixtures/hg_tags.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								spec/fixtures/hg_tags.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
tip                             1019:bca3f20b249b
 | 
			
		||||
0.9.1                           1017:76ce7cca95d8
 | 
			
		||||
0.9                             1001:dbaa6f4ec585
 | 
			
		||||
0.8                              839:65b66ac0fc83
 | 
			
		||||
0.7.1                            702:e1357f00129f
 | 
			
		||||
0.7                              561:7b2af3b4c968
 | 
			
		||||
0.6.3                            486:e38077f4e4aa
 | 
			
		||||
0.6.2                            405:07bb099b7b10
 | 
			
		||||
0.6.1                            389:93750f3fbbe2
 | 
			
		||||
0.6                              369:34e6012c783a
 | 
			
		||||
0.5.3                            321:5ffa6ae7e699
 | 
			
		||||
0.5.2                            318:fdc2c2e4cebe
 | 
			
		||||
0.5.1                            315:33a5ea0cbe7a
 | 
			
		||||
0.5                              313:47490716f4c9
 | 
			
		||||
0.4                              240:47fa3a14cc63
 | 
			
		||||
0.3.1                            132:bc231db18e1c
 | 
			
		||||
0.3                              130:661615e510dd
 | 
			
		||||
0.2                               81:f98d13b442f6
 | 
			
		||||
@@ -70,12 +70,54 @@ describe provider_class do
 | 
			
		||||
 | 
			
		||||
  describe "when checking the revision property" do
 | 
			
		||||
    before do
 | 
			
		||||
      @resource.expects(:value).with(:path).returns(@path)
 | 
			
		||||
    end
 | 
			
		||||
    it "should use 'hg tip'" do
 | 
			
		||||
      @provider.expects('hg').with('parents').returns(fixture(:hg_parents))
 | 
			
		||||
      @resource.expects(:value).with(:path).returns(@path).at_least_once
 | 
			
		||||
      Dir.expects(:chdir).with(@path).yields
 | 
			
		||||
      @provider.revision.should == '34e6012c783a'
 | 
			
		||||
    end
 | 
			
		||||
    context "when given a non-SHA as the resource revision" do
 | 
			
		||||
      before do
 | 
			
		||||
        @provider.expects(:hg).with('parents').returns(fixture(:hg_parents))
 | 
			
		||||
      end
 | 
			
		||||
      context "when its SHA is not different than the current SHA" do
 | 
			
		||||
        before do
 | 
			
		||||
          @resource.expects(:value).with(:revision).returns('0.6').at_least_once
 | 
			
		||||
        end
 | 
			
		||||
        it "should return the ref" do
 | 
			
		||||
          @provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
 | 
			
		||||
          @provider.revision.should == '0.6'
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      context "when its SHA is different than the current SHA" do
 | 
			
		||||
        before do
 | 
			
		||||
          @resource.expects(:value).with(:revision).returns('0.5.3').at_least_once
 | 
			
		||||
        end
 | 
			
		||||
        it "should return the current SHA" do
 | 
			
		||||
          @provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
 | 
			
		||||
          @provider.revision.should == '34e6012c783a'
 | 
			
		||||
        end          
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    context "when given a SHA as the resource revision" do
 | 
			
		||||
      before do
 | 
			
		||||
        @provider.expects(:hg).with('parents').returns(fixture(:hg_parents))
 | 
			
		||||
      end
 | 
			
		||||
      context "when it is the same as the current SHA" do
 | 
			
		||||
        before do
 | 
			
		||||
          @resource.expects(:value).with(:revision).returns('34e6012c783a').at_least_once
 | 
			
		||||
        end
 | 
			
		||||
        it "should return it" do
 | 
			
		||||
          @provider.expects(:hg).with('tags').never
 | 
			
		||||
          @provider.revision.should == '34e6012c783a'
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      context "when it is not the same as the current SHA" do
 | 
			
		||||
        before do
 | 
			
		||||
          @resource.expects(:value).with(:revision).returns('34e6012c7').at_least_once
 | 
			
		||||
        end
 | 
			
		||||
        it "should return the current SHA" do
 | 
			
		||||
          @provider.expects(:hg).with('tags').returns(fixture(:hg_tags))          
 | 
			
		||||
          @provider.revision.should == '34e6012c783a'
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user