示例#1
0
文件: git.py 项目: pombreda/bigitr
    def initializeGitRepository(self, create=True):
        gitDir = self.ctx.getGitDir()
        repoName = self.ctx.getRepositoryName(self.repo)
        repoDir = '/'.join((gitDir, repoName))
        skeleton = self.ctx.getSkeleton(self.repo)

        if os.path.exists(repoDir):
            os.chdir(repoDir)
        else:
            os.chdir(gitDir)
            self.clone(self.ctx.getGitRef(self.repo))
            os.chdir(repoDir)
            refs = self.refs()
            if not refs:
                if not create:
                    raise RuntimeError('repository %s has not been populated'
                                       %self.repo)
                # master branch needs to exist, so use skeleton or .gitignore
                if skeleton:
                    skelFiles = util.listFiles(skeleton)
                    util.copyFiles(skeleton, repoDir, skelFiles)
                else:
                    gitignore = file('/'.join((repoDir, '.gitignore')), 'w')
                    exportDir = self.ctx.getCVSExportDir(self.repo)
                    cvsignoreName = '/'.join((exportDir, '.cvsignore'))
                    if os.path.exists(cvsignoreName):
                        gitignore.write(file(cvsignoreName).read())
                    gitignore.close()
                self.addAll()
                self.commit('create new empty master branch')
                self.push('origin', 'master', 'master')
示例#2
0
    def initializeGitRepository(self, create=True):
        gitDir = self.ctx.getGitDir()
        repoName = self.ctx.getRepositoryName(self.repo)
        repoDir = '/'.join((gitDir, repoName))
        skeleton = self.ctx.getSkeleton(self.repo)

        if os.path.exists(repoDir):
            os.chdir(repoDir)
        else:
            os.chdir(gitDir)
            self.clone(self.ctx.getGitRef(self.repo))
            os.chdir(repoDir)
            refs = self.refs()
            if not refs:
                if not create:
                    raise RuntimeError('repository %s has not been populated' %
                                       self.repo)
                # master branch needs to exist, so use skeleton or .gitignore
                if skeleton:
                    skelFiles = util.listFiles(skeleton)
                    util.copyFiles(skeleton, repoDir, skelFiles)
                else:
                    gitignore = file('/'.join((repoDir, '.gitignore')), 'w')
                    exportDir = self.ctx.getCVSExportDir(self.repo)
                    cvsignoreName = '/'.join((exportDir, '.cvsignore'))
                    if os.path.exists(cvsignoreName):
                        gitignore.write(file(cvsignoreName).read())
                    gitignore.close()
                self.addAll()
                self.commit('create new empty master branch')
                self.push('origin', 'master', 'master')
示例#3
0
文件: cvsimport.py 项目: mikjo/bigitr
    def importcvs(self, repository, Git, CVS, cvsbranch, gitbranch):
        gitDir = self.ctx.getGitDir()
        repoName = self.ctx.getRepositoryName(repository)
        repoDir = "/".join((gitDir, repoName))
        skeleton = self.ctx.getSkeleton(repository)
        exportDir = self.ctx.getCVSExportDir(repository)

        if os.path.exists(exportDir):
            util.removeRecursive(exportDir)
        os.makedirs(exportDir)
        os.chdir(os.path.dirname(exportDir))
        CVS.export(os.path.basename(exportDir))
        cvsignore = ignore.Ignore(Git.log, exportDir + "/.cvsignore")
        # Awaiting use case requiring partial import into Git before
        # writing test cases to implement it for import from CVS into Git
        # bigitrsync = ignore.Ignore(Git.log, gitDir + '/.bigitrsync', regex=True)
        exportedFiles = util.listFiles(exportDir)
        if not exportedFiles:
            raise RuntimeError("CVS branch '%s' for location '%s' contains no files" % (CVS.branch, CVS.location))
        # Sync only explicitly requested files
        # exportedFiles = sorted(list(bigitrsync.include(exportedFiles)))

        os.chdir(exportDir)

        Git.initializeGitRepository()

        os.chdir(repoDir)
        addSkeleton = False
        branches = Git.branches()
        if gitbranch not in branches:
            if "remotes/origin/" + gitbranch in branches:
                # check out existing remote branch
                Git.checkoutTracking(gitbranch)
            else:
                # check out a new "orphan" branch
                Git.checkoutNewImportBranch(gitbranch)
                addSkeleton = True
        else:
            if Git.branch() != gitbranch:
                Git.checkout(gitbranch)
            Git.fetch()
            Git.mergeFastForward("origin/" + gitbranch)

        # clean up after any garbage left over from previous runs so
        # that we can change branches
        Git.pristine()

        gitFiles = Git.listContentFiles()
        gitFiles = cvsignore.filter(set(gitFiles))
        gitFiles.discard(".bigitrsync")
        # delete only files matching the sync expressions
        # gitFiles = sorted(list(bigitrsync.include(gitFiles)))
        for filename in gitFiles:
            os.remove(filename)

        os.chdir(gitDir)

        util.copyFiles(exportDir, repoDir, exportedFiles)

        if addSkeleton:
            if skeleton:
                skelFiles = util.listFiles(skeleton)
                util.copyFiles(skeleton, repoDir, skelFiles)

        os.chdir(repoDir)
        Git.runImpPreHooks(gitbranch)
        if Git.status():
            # there is some change to commit
            Git.infoStatus()
            Git.infoDiff()
            # store Git.log.lastOutput() to email after successful push
            Git.addAll()

        # Git.addAll() will have regularized line ending differences,
        # and in case that is the only change, we need to check again
        # on status
        if Git.status():
            # FIXME: try to create a commit message that includes all
            # the CVS commit messages since the previous commit, de-duplicated
            Git.commit("import from CVS as of %s" % time.asctime())
            Git.push("origin", gitbranch, gitbranch)
            Git.runImpPostHooks(gitbranch)

        merger = gitmerge.Merger(self.ctx)
        merger.mergeFrom(repository, Git, gitbranch)
示例#4
0
文件: util_test.py 项目: mikjo/bigitr
 def test_listFiles(self):
     self.assertEqual(sorted(util.listFiles(self.s)),
                      ['a', 'b', 'dir/metoo'])
示例#5
0
文件: util_test.py 项目: mikjo/bigitr
 def test_removeRecursive(self):
     util.removeRecursive(self.s)
     self.assertEqual(util.listFiles(self.s), [])
示例#6
0
    def importcvs(self, repository, Git, CVS, cvsbranch, gitbranch):
        gitDir = self.ctx.getGitDir()
        repoName = self.ctx.getRepositoryName(repository)
        repoDir = '/'.join((gitDir, repoName))
        skeleton = self.ctx.getSkeleton(repository)
        exportDir = self.ctx.getCVSExportDir(repository)

        if os.path.exists(exportDir):
            util.removeRecursive(exportDir)
        os.makedirs(exportDir)
        os.chdir(os.path.dirname(exportDir))
        CVS.export(os.path.basename(exportDir))
        cvsignore = ignore.Ignore(Git.log, exportDir + '/.cvsignore')
        # Awaiting use case requiring partial import into Git before
        # writing test cases to implement it for import from CVS into Git
        # bigitrsync = ignore.Ignore(Git.log, gitDir + '/.bigitrsync', regex=True)
        exportedFiles = util.listFiles(exportDir)
        if not exportedFiles:
            raise RuntimeError("CVS branch '%s' for location '%s' contains no files"
                               %(CVS.branch, CVS.location))
        # Sync only explicitly requested files
        # exportedFiles = sorted(list(bigitrsync.include(exportedFiles)))

        os.chdir(exportDir)

        Git.initializeGitRepository()

        os.chdir(repoDir)
        addSkeleton = False
        branches = Git.branches()
        if gitbranch not in branches:
            if 'remotes/origin/' + gitbranch in branches:
                # check out existing remote branch
                Git.checkoutTracking(gitbranch)
            else:
                # check out a new "orphan" branch
                Git.checkoutNewImportBranch(gitbranch)
                addSkeleton = True
        else:
            if Git.branch() != gitbranch:
                Git.checkout(gitbranch)
            Git.fetch()
            Git.mergeFastForward('origin/' + gitbranch)

        # clean up after any garbage left over from previous runs so
        # that we can change branches
        Git.pristine()

        gitFiles = Git.listContentFiles()
        gitFiles = cvsignore.filter(set(gitFiles))
        gitFiles.discard('.bigitrsync')
        # delete only files matching the sync expressions
        # gitFiles = sorted(list(bigitrsync.include(gitFiles)))
        for filename in gitFiles:
            os.remove(filename)

        os.chdir(gitDir)

        util.copyFiles(exportDir, repoDir, exportedFiles)

        if addSkeleton:
            if skeleton:
                skelFiles = util.listFiles(skeleton)
                util.copyFiles(skeleton, repoDir, skelFiles)

        os.chdir(repoDir)
        Git.runImpPreHooks(gitbranch)
        if Git.status():
            # there is some change to commit
            Git.infoStatus()
            Git.infoDiff()
            # store Git.log.lastOutput() to email after successful push
            Git.addAll()

        # Git.addAll() will have regularized line ending differences,
        # and in case that is the only change, we need to check again
        # on status
        if Git.status():
            # FIXME: try to create a commit message that includes all
            # the CVS commit messages since the previous commit, de-duplicated
            Git.commit('import from CVS as of %s' %time.asctime())
            Git.push('origin', gitbranch, gitbranch)
            Git.runImpPostHooks(gitbranch)

        merger = gitmerge.Merger(self.ctx)
        merger.mergeFrom(repository, Git, gitbranch)
示例#7
0
 def test_listFiles(self):
     self.assertEqual(sorted(util.listFiles(self.s)),
                      ['a', 'b', 'dir/metoo'])
示例#8
0
 def test_removeRecursive(self):
     util.removeRecursive(self.s)
     self.assertEqual(util.listFiles(self.s), [])