Changeset 1246 in tailor


Ignore:
Timestamp:
08/16/06 02:01:01 (7 years ago)
Author:
lele@…
Hash name:
20060816000101-97f81-ae488fe484c47114e094c9f083fdc70f93151a1d
Message:

Insert add_dir entries at the right place
This is an adaption of a patch by Jeff Licquia <jeff@…>:
instead of appending the ADD entries for the parent directories, place
them at the right place, ie before the entry that triggers the
creation.

Location:
vcpx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • vcpx/repository/cvsps.py

    r1235 r1246  
    296296                                   'revision %s', e.name, e.new_revision) 
    297297                    e.action_kind = e.ADDED 
    298                     addeddirs.extend(self.__createParentCVSDirectories(changeset, e.name)) 
     298                    for dir in self.__createParentCVSDirectories(changeset, e.name): 
     299                        addeddirs.append((e, dir)) 
    299300                elif info.cvs_version == e.new_revision: 
    300301                    self.log.debug('skipping "%s" since it is already ' 
     
    309310                        deleteddirs.append(entrydir) 
    310311                    continue 
    311             elif e.action_kind == e.ADDED and e.new_revision is None: 
    312                 # This is a new directory entry, there is no need to update it 
    313                 continue 
     312            elif e.action_kind == e.ADDED: 
     313                if e.new_revision is None: 
     314                    # This is a new directory entry, there is no need to update it 
     315                    continue 
     316                else: 
     317                    for dir in self.__createParentCVSDirectories(changeset, e.name): 
     318                        addeddirs.append((e, dir)) 
    314319 
    315320            # If this is a directory (CVS does not version directories, 
     
    361366        # added/removed, so that the replayer gets their name. 
    362367 
    363         for path in addeddirs: 
    364             entry = changeset.addEntry(path, None) 
     368        for entry,path in addeddirs: 
     369            entry = changeset.addEntry(path, None, before=entry) 
    365370            entry.action_kind = entry.ADDED 
    366371 
     
    511516        return last 
    512517 
    513     def _willApplyChangeset(self, changeset, applyable=None): 
    514         """ 
    515         This gets called just before applying each changeset. 
    516  
    517         Since CVS has no "createdir" event, we have to take care 
    518         of new directories, creating empty-but-reasonable CVS dirs. 
    519         """ 
    520  
    521         if UpdatableSourceWorkingDir._willApplyChangeset(self, changeset, 
    522                                                          applyable): 
    523             for m in changeset.entries: 
    524                 if m.action_kind == m.ADDED: 
    525                     self.__createParentCVSDirectories(changeset, m.name) 
    526  
    527             return True 
    528         else: 
    529             return False 
    530  
    531518    def __createParentCVSDirectories(self, changeset, entry): 
    532519        """ 
     
    549536        parentcvs = join(self.repository.basedir, path, 'CVS') 
    550537        while not exists(parentcvs): 
    551             tobeadded.insert(0, join(self.repository.basedir, path)) 
     538            tobeadded.insert(0, path) 
    552539            if not path: 
    553540                break 
     
    567554            rootf.close() 
    568555 
    569         for basedir in tobeadded: 
     556        for toadd in tobeadded: 
     557            basedir = join(self.repository.basedir, toadd) 
    570558            cvsarea = join(basedir, 'CVS') 
    571559 
  • vcpx/tests/tailor.py

    r1214 r1246  
    245245subdir = svn 
    246246 
     247 
     248[cvsdirtest] 
     249target = bzr:cvsdirtest 
     250start-revision = INITIAL 
     251root-directory = %(testdir)s/cvsdirtest/cvs2bzr 
     252source = cvs:cvsdirtest 
     253subdir = test-work 
     254 
     255[cvspsdirtest] 
     256target = bzr:cvsdirtest 
     257start-revision = INITIAL 
     258root-directory = %(testdir)s/cvsdirtest/cvsps2bzr 
     259source = cvsps:cvsdirtest 
     260subdir = test-work 
     261 
     262[darcsdirtest] 
     263target = darcs:cvsdirtest 
     264start-revision = INITIAL 
     265root-directory = %(testdir)s/cvsdirtest/cvs2darcs 
     266source = cvs:cvsdirtest 
     267subdir = test-work 
     268 
     269[svndirtest] 
     270target = svn:cvsdirtest 
     271start-revision = INITIAL 
     272root-directory = %(testdir)s/cvsdirtest/cvs2svn 
     273source = cvs:cvsdirtest 
     274subdir = test-work 
     275 
     276[bzr:cvsdirtest] 
     277 
     278[darcs:cvsdirtest] 
     279 
     280[cvs:cvsdirtest] 
     281module = test 
     282repository = %(testdir)s/cvsdirtest.cvsrepo 
     283 
     284[cvsps:cvsdirtest] 
     285module = test 
     286repository = %(testdir)s/cvsdirtest.cvsrepo 
     287 
     288[svn:cvsdirtest] 
     289module = test 
     290repository = file://%(testdir)s/cvsdirtest.svnrepo 
     291 
    247292''' 
    248293 
     
    509554 
    510555        self.tailorize('darcs_rename_delete_dir') 
     556 
     557 
     558class CvsOrderTest(OperationalTest): 
     559    """Test problems with improper ordering of adds with new directories.""" 
     560 
     561    def setUp(self): 
     562        """Create a CVS repository that has the difficult history.""" 
     563 
     564        from os import mkdir, getcwd 
     565        from os.path import join, exists 
     566 
     567        super(CvsOrderTest, self).setUp() 
     568 
     569        repodir = join(self.TESTDIR, 'cvsdirtest.cvsrepo') 
     570        basedir = join(self.TESTDIR, 'cvsdirtest') 
     571 
     572        if not exists(repodir): 
     573            cvscmd = ['cvs', '-d', repodir] 
     574            mkdir(basedir) 
     575            mkdir(repodir) 
     576            ExternalCommand(cwd=self.TESTDIR, nolog=True, command=cvscmd).execute( 
     577                'init') 
     578 
     579            startdir = join(basedir, 'start') 
     580            mkdir(startdir) 
     581            open(join(startdir, 'foo'), "w").close() 
     582 
     583            ExternalCommand(cwd=startdir, nolog=True, command=cvscmd).execute( 
     584                'import', '-m', 'one', 'test', 'test', 'test1') 
     585 
     586            workdir = join(basedir, 'work') 
     587            ExternalCommand(cwd=startdir, nolog=True, command=cvscmd).execute( 
     588                'checkout', '-d', workdir, 'test') 
     589 
     590            bardir = join(workdir, 'bar') 
     591            mkdir(bardir) 
     592            baz = join(bardir, 'baz') 
     593            open(baz, "w").close() 
     594 
     595            ExternalCommand(cwd=workdir, nolog=True, command=cvscmd).execute( 
     596                'add', bardir, baz) 
     597            ExternalCommand(cwd=workdir, nolog=True, command=cvscmd).execute( 
     598                'commit', '-m', 'two') 
     599 
     600    def testCvsConvertDirectoryAddToBazaarng(self): 
     601        """Test that we can handle directory adds in the cvs module to bzr.""" 
     602 
     603        t = Tailorizer("cvsdirtest", self.config) 
     604        t() 
     605 
     606    def testCvspsConvertDirectoryAddToBazaarng(self): 
     607        """Test that we can handle directory adds in the cvsps module to bzr.""" 
     608 
     609        t = Tailorizer("cvspsdirtest", self.config) 
     610        t() 
     611 
     612    def testCvsConvertDirectoryAddToDarcs(self): 
     613        """Test that we can handle directory adds in the cvs module to darcs.""" 
     614 
     615        t = Tailorizer("darcsdirtest", self.config) 
     616        t() 
     617 
     618    def testCvsConvertDirectoryAddToSubversion(self): 
     619        """Test that we can handle directory adds in the cvs module to svn.""" 
     620 
     621        t = Tailorizer("svndirtest", self.config) 
     622        t() 
Note: See TracChangeset for help on using the changeset viewer.