[svn r37950] * add and document dist_rsync_ignore option to ignore
files and directories for rsyncing --HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									03dc73b195
								
							
						
					
					
						commit
						11591c3c4f
					
				| 
						 | 
					@ -693,6 +693,7 @@ The options that you need to specify in that conftest.py file are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* `dist_hosts`: a required list of host specifications
 | 
					* `dist_hosts`: a required list of host specifications
 | 
				
			||||||
* `dist_rsync_roots` - a list of relative locations to copy to the remote machines.
 | 
					* `dist_rsync_roots` - a list of relative locations to copy to the remote machines.
 | 
				
			||||||
 | 
					* `dist_rsync_ignore` - a list of relative locations to ignore for rsyncing 
 | 
				
			||||||
* `dist_remotepython` - the remote python executable to run.
 | 
					* `dist_remotepython` - the remote python executable to run.
 | 
				
			||||||
* `dist_nicelevel` - process priority of remote nodes. 
 | 
					* `dist_nicelevel` - process priority of remote nodes. 
 | 
				
			||||||
* `dist_boxing` - will run each single test in a separate process 
 | 
					* `dist_boxing` - will run each single test in a separate process 
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,7 @@ if hasattr(py.std.os, 'nice'):
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    dist_nicelevel = 0
 | 
					    dist_nicelevel = 0
 | 
				
			||||||
_dist_import_pypy = False # used for regenerating JS application 
 | 
					_dist_import_pypy = False # used for regenerating JS application 
 | 
				
			||||||
 | 
					dist_rsync_ignore = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ===================================================
 | 
					# ===================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,10 @@ class HostRSync(py.execnet.RSync):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    def __init__(self, *args, **kwargs):
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
        self._synced = {}
 | 
					        self._synced = {}
 | 
				
			||||||
 | 
					        ignores= None
 | 
				
			||||||
 | 
					        if 'ignores' in kwargs:
 | 
				
			||||||
 | 
					            ignores = kwargs.pop('ignores')
 | 
				
			||||||
 | 
					        self._ignores = ignores or []
 | 
				
			||||||
        super(HostRSync, self).__init__(*args, **kwargs)
 | 
					        super(HostRSync, self).__init__(*args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def filter(self, path):
 | 
					    def filter(self, path):
 | 
				
			||||||
| 
						 | 
					@ -79,6 +83,10 @@ class HostRSync(py.execnet.RSync):
 | 
				
			||||||
        if not path.ext in ('.pyc', '.pyo'):
 | 
					        if not path.ext in ('.pyc', '.pyo'):
 | 
				
			||||||
            if not path.basename.endswith('~'): 
 | 
					            if not path.basename.endswith('~'): 
 | 
				
			||||||
                if path.check(dotfile=0):
 | 
					                if path.check(dotfile=0):
 | 
				
			||||||
 | 
					                    for x in self._ignores:
 | 
				
			||||||
 | 
					                        if path == x:
 | 
				
			||||||
 | 
					                            break
 | 
				
			||||||
 | 
					                    else:
 | 
				
			||||||
                        return True
 | 
					                        return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def add_target_host(self, host, destrelpath=None, finishedcallback=None):
 | 
					    def add_target_host(self, host, destrelpath=None, finishedcallback=None):
 | 
				
			||||||
| 
						 | 
					@ -115,10 +123,11 @@ class HostManager(object):
 | 
				
			||||||
    def init_rsync(self, reporter):
 | 
					    def init_rsync(self, reporter):
 | 
				
			||||||
        # send each rsync root  
 | 
					        # send each rsync root  
 | 
				
			||||||
        roots = self.config.getvalue_pathlist("dist_rsync_roots")
 | 
					        roots = self.config.getvalue_pathlist("dist_rsync_roots")
 | 
				
			||||||
 | 
					        ignores = self.config.getvalue_pathlist("dist_rsync_ignore")
 | 
				
			||||||
        if roots is None:
 | 
					        if roots is None:
 | 
				
			||||||
            roots = [self.config.topdir]
 | 
					            roots = [self.config.topdir]
 | 
				
			||||||
        self.prepare_gateways()
 | 
					        self.prepare_gateways()
 | 
				
			||||||
        rsync = HostRSync()
 | 
					        rsync = HostRSync(ignores=ignores)
 | 
				
			||||||
        for root in roots: 
 | 
					        for root in roots: 
 | 
				
			||||||
            destrelpath = root.relto(self.config.topdir)
 | 
					            destrelpath = root.relto(self.config.topdir)
 | 
				
			||||||
            for host in self.hosts:
 | 
					            for host in self.hosts:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,3 +142,21 @@ class TestHostManager(DirSetup):
 | 
				
			||||||
        assert self.dest.join("dir1", "dir2").check()
 | 
					        assert self.dest.join("dir1", "dir2").check()
 | 
				
			||||||
        assert self.dest.join("dir1", "dir2", 'hello').check()
 | 
					        assert self.dest.join("dir1", "dir2", 'hello').check()
 | 
				
			||||||
        assert not self.dest.join("bogus").check()
 | 
					        assert not self.dest.join("bogus").check()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_hostmanager_rsync_ignore(self):
 | 
				
			||||||
 | 
					        dir2 = self.source.ensure("dir1", "dir2", dir=1)
 | 
				
			||||||
 | 
					        dir5 = self.source.ensure("dir5", "dir6", "bogus")
 | 
				
			||||||
 | 
					        dirf = self.source.ensure("dir5", "file")
 | 
				
			||||||
 | 
					        dir2.ensure("hello")
 | 
				
			||||||
 | 
					        self.source.join("conftest.py").write(py.code.Source("""
 | 
				
			||||||
 | 
					            dist_rsync_ignore = ['dir1/dir2', 'dir5/dir6']
 | 
				
			||||||
 | 
					        """))
 | 
				
			||||||
 | 
					        config = py.test.config._reparse([self.source])
 | 
				
			||||||
 | 
					        hm = HostManager(config, 
 | 
				
			||||||
 | 
					                         hosts=[HostInfo("localhost:" + str(self.dest))])
 | 
				
			||||||
 | 
					        events = []
 | 
				
			||||||
 | 
					        hm.init_rsync(reporter=events.append)
 | 
				
			||||||
 | 
					        assert self.dest.join("dir1").check()
 | 
				
			||||||
 | 
					        assert not self.dest.join("dir1", "dir2").check()
 | 
				
			||||||
 | 
					        assert self.dest.join("dir5","file").check()
 | 
				
			||||||
 | 
					        assert not self.dest.join("dir6").check()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue