コード例 #1
0
ファイル: repo_task.py プロジェクト: NMGRL/pychron
    def _get_repo(self, name):
        root = repository_path(name)
        if os.path.isdir(root):
            repo = GitRepoManager()
            repo.open_repo(root)

            return repo
コード例 #2
0
    def _add_repository(self, dest, repository_identifier, creator, create_repo):
        repository_identifier = format_repository_identifier(repository_identifier)

        # sys.exit()
        proot = os.path.join(paths.repository_dataset_dir, repository_identifier)
        if not os.path.isdir(proot):
            # create new local repo
            os.mkdir(proot)

            repo = GitRepoManager()
            repo.open_repo(proot)

            repo.add_ignore('.DS_Store')
            self.repo_man = repo
            if create_repo:
                # add repo to central location
                create_github_repo(repository_identifier)

                url = 'https://github.com/{}/{}.git'.format(ORG, repository_identifier)
                self.debug('Create repo at github. url={}'.format(url))
                repo.create_remote(url)
        else:
            repo = GitRepoManager()
            repo.open_repo(proot)

        dbexp = dest.get_repository(repository_identifier)
        if not dbexp:
            dest.add_repository(repository_identifier, creator)

        return repo
コード例 #3
0
    def _get_repo(self, name):
        root = repository_path(name)
        if os.path.isdir(root):
            repo = GitRepoManager()
            repo.open_repo(root)

            return repo
コード例 #4
0
 def _selected_local_repository_name_changed(self, new):
     if new:
         root = os.path.join(paths.experiment_dataset_dir, new)
         # print root, new, os.path.isdir(root)
         if os.path.isdir(root):
             repo = GitRepoManager()
             repo.open_repo(root)
             self._repo = repo
             self._refresh_branches()
コード例 #5
0
ファイル: dvc.py プロジェクト: stephen-e-cox/pychron
 def _commit_freeze(self, added, msg):
     key = lambda x: x[0]
     rr = sorted(added, key=key)
     for repo, ps in groupby(rr, key=key):
         rm = GitRepoManager()
         rm.open_repo(repo, paths.repository_dataset_dir)
         rm.add_paths(ps)
         rm.smart_pull()
         rm.commit(msg)
コード例 #6
0
ファイル: repo_task.py プロジェクト: OSUPychron/pychron
 def _selected_local_repository_name_changed(self, new):
     if new:
         root = os.path.join(paths.experiment_dataset_dir, new)
         # print root, new, os.path.isdir(root)
         if os.path.isdir(root):
             repo = GitRepoManager()
             repo.open_repo(root)
             self._repo = repo
             self._refresh_branches()
コード例 #7
0
def commit_initial_import(repo_identifier, root):
    from pychron.git_archive.repo_manager import GitRepoManager
    rm = GitRepoManager()
    proot = os.path.join(root, repo_identifier)
    rm.open_repo(proot)

    repo = rm._repo
    repo.git.add('.')
    repo.git.commit('-m', '<IMPORT> initial')
    repo.git.push('--set-upstream', 'origin', 'master')
コード例 #8
0
def fix_import_commit(repo_identifier, root):
    from pychron.git_archive.repo_manager import GitRepoManager
    rm = GitRepoManager()
    proot = os.path.join(root, repo_identifier)
    rm.open_repo(proot)

    repo = rm._repo
    print('========= {} ======'.format(repo_identifier))
    txt = repo.git.log('--pretty=oneline')
    print(txt)
コード例 #9
0
    def __init__(self, path=None, root=None, *args, **kw):
        super(BaseGitHistory, self).__init__(*args, **kw)
        if root:
            from pychron.git_archive.repo_manager import GitRepoManager

            self.repo_man = GitRepoManager()
            self.repo_man.open_repo(root)

        if path:
            self._path = path
コード例 #10
0
def fix_import_commit(repo_identifier, root):
    from pychron.git_archive.repo_manager import GitRepoManager
    rm = GitRepoManager()
    proot = os.path.join(root, repo_identifier)
    rm.open_repo(proot)

    repo = rm._repo
    print '========= {} ======'.format(repo_identifier)
    txt = repo.git.log('--pretty=oneline')
    print txt
コード例 #11
0
def commit_initial_import(repo_identifier, root):
    from pychron.git_archive.repo_manager import GitRepoManager
    rm = GitRepoManager()
    proot = os.path.join(root, repo_identifier)
    rm.open_repo(proot)

    repo = rm._repo
    repo.git.add('.')
    repo.git.commit('-m', '<IMPORT> initial')
    repo.git.push('--set-upstream', 'origin', 'master')
コード例 #12
0
def fix_meta(dest, repo_identifier, root):
    d = os.path.join(root, repo_identifier)
    changed = False
    with dest.session_ctx():
        repo = dest.get_repository(repo_identifier)
        for ra in repo.repository_associations:
            an = ra.analysis
            p = analysis_path(an.record_id, repo_identifier)
            obj = dvc_load(p)
            if not obj:
                print '********************** {} not found in repo'.format(
                    an.record_id)
                continue

            print an.record_id, p
            if not obj['irradiation']:
                obj['irradiation'] = an.irradiation
                lchanged = True
                changed = True
            if not obj['irradiation_position']:
                obj['irradiation_position'] = an.irradiation_position_position
                lchanged = True
                changed = True
            if not obj['irradiation_level']:
                obj['irradiation_level'] = an.irradiation_level
                lchanged = True
                changed = True
            if not obj['material']:
                obj['material'] = an.irradiation_position.sample.material.name
                lchanged = True
                changed = True
            if not obj['project']:
                obj['project'] = an.irradiation_position.sample.project.name
                lchanged = True
                changed = True

            if obj['repository_identifier'] != an.repository_identifier:
                obj['repository_identifier'] = an.repository_identifier
                lchanged = True
                changed = True

            if lchanged:
                print '{} changed'.format(an.record_id)
                dvc_dump(obj, p)

    if changed:
        from pychron.git_archive.repo_manager import GitRepoManager
        rm = GitRepoManager()
        rm.open_repo(d)

        repo = rm._repo
        repo.git.add('.')
        repo.git.commit('-m', '<MANUAL> fixed metadata')
        repo.git.push()
コード例 #13
0
def fix_meta(dest, repo_identifier, root):
    d = os.path.join(root, repo_identifier)
    changed = False
    with dest.session_ctx():
        repo = dest.get_repository(repo_identifier)
        for ra in repo.repository_associations:
            an = ra.analysis
            p = analysis_path(an.record_id, repo_identifier)
            obj = dvc_load(p)
            if not obj:
                print('********************** {} not found in repo'.format(an.record_id))
                continue

            print(an.record_id, p)
            if not obj['irradiation']:
                obj['irradiation'] = an.irradiation
                lchanged = True
                changed = True
            if not obj['irradiation_position']:
                obj['irradiation_position'] = an.irradiation_position_position
                lchanged = True
                changed = True
            if not obj['irradiation_level']:
                obj['irradiation_level'] = an.irradiation_level
                lchanged = True
                changed = True
            if not obj['material']:
                obj['material'] = an.irradiation_position.sample.material.name
                lchanged = True
                changed = True
            if not obj['project']:
                obj['project'] = an.irradiation_position.sample.project.name
                lchanged = True
                changed = True

            if obj['repository_identifier'] != an.repository_identifier:
                obj['repository_identifier'] = an.repository_identifier
                lchanged = True
                changed = True

            if lchanged:
                print('{} changed'.format(an.record_id))
                dvc_dump(obj, p)

    if changed:
        from pychron.git_archive.repo_manager import GitRepoManager
        rm = GitRepoManager()
        rm.open_repo(d)

        repo = rm._repo
        repo.git.add('.')
        repo.git.commit('-m', '<MANUAL> fixed metadata')
        repo.git.push()
コード例 #14
0
ファイル: dvc.py プロジェクト: waffle-iron/pychron
    def _get_experiment_repo(self, experiment_id):
        repo = self.experiment_repo
        path = experiment_path(experiment_id)

        if repo is None or repo.path != path:
            self.debug('make new repomanager for {}'.format(path))
            repo = GitRepoManager()
            repo.path = path
            repo.open_repo(path)
            self.experiment_repo = repo

        return repo
コード例 #15
0
def create_repo_for_existing_local(repo_identifier, root, organization='NMGRLData'):
    from pychron.git_archive.repo_manager import GitRepoManager
    repo = GitRepoManager()
    proot = os.path.join(root, repo_identifier)
    repo.open_repo(proot)

    org = Organization(organization)
    if not org.has_repo(repo_identifier):
        usr = os.environ.get('GITHUB_USER')
        pwd = os.environ.get('GITHUB_PASSWORD')
        org.create_repo(repo_identifier, usr, pwd)
        url = 'https://github.com/{}/{}.git'.format(organization, repo_identifier)
        repo.create_remote(url)
コード例 #16
0
ファイル: dvc.py プロジェクト: waffle-iron/pychron
def experiment_has_staged(ps):
    if not hasattr(ps, '__iter__'):
        ps = (ps,)

    changed = []
    repo = GitRepoManager()
    for p in ps:
        pp = os.path.join(paths.experiment_dataset_dir, p)
        repo.open_repo(pp)
        if repo.has_unpushed_commits():
            changed.append(p)

    return changed
コード例 #17
0
ファイル: dvc.py プロジェクト: stephen-e-cox/pychron
    def _get_repository(self, repository_identifier, as_current=True):
        repo = None
        if as_current:
            repo = self.current_repository

        path = repository_path(repository_identifier)

        if repo is None or repo.path != path:
            self.debug('make new repomanager for {}'.format(path))
            repo = GitRepoManager()
            repo.path = path
            repo.open_repo(path)
            if as_current:
                self.current_repository = repo

        return repo
コード例 #18
0
ファイル: labbook_task.py プロジェクト: UManPychron/pychron
    def activated(self):
        repo = GitRepoManager()
        repo.open_repo(paths.labbook_dir)
        self._repo = repo
        self.history_model.repo_man = repo
        self.history_model.auto_commit_checkouts = False

        # self._preference_binder('pychron.labbook', ('remote',))

        if self.remote:
            remote = 'https://github.com/{}'.format(self.remote)
            self._repo.create_remote(remote, force=True)
            self.pull(make=False)

        self.make_hierarchy()

        self._repo.add(os.path.join(paths.labbook_dir, 'labels.db'))
コード例 #19
0
    def activated(self):
        repo = GitRepoManager()
        repo.open_repo(paths.labbook_dir)
        self._repo = repo
        self.history_model.repo_man = repo
        self.history_model.auto_commit_checkouts = False

        # self._preference_binder('pychron.labbook', ('remote',))

        if self.remote:
            remote = 'https://github.com/{}'.format(self.remote)
            self._repo.create_remote(remote, force=True)
            self.pull(make=False)

        self.make_hierarchy()

        self._repo.add(os.path.join(paths.labbook_dir, 'labels.db'))
コード例 #20
0
ファイル: history.py プロジェクト: UManPychron/pychron
    def __init__(self, path=None, root=None, *args, **kw):
        super(GitArchiveHistory, self).__init__(*args, **kw)
        if root:
            from pychron.git_archive.repo_manager import GitRepoManager
            self.repo_man = GitRepoManager()
            self.repo_man.open_repo(root)

        if path:
            self._path = path
コード例 #21
0
ファイル: func.py プロジェクト: tdurieux/BugSwarm-dissection
def push_repositories(ps, remote='origin', branch='master', quiet=True):
    for p in ps:
        pp = os.path.join(paths.repository_dataset_dir, p)
        # repo = Repo(pp)
        repo = GitRepoManager()
        repo.open_repo(pp)

        if repo.smart_pull(remote=remote, branch=branch, quiet=quiet):
            repo.push(remote, branch)
コード例 #22
0
ファイル: func.py プロジェクト: NMGRL/pychron
def push_repositories(ps, remote='origin', branch='master', quiet=True):
    for p in ps:
        pp = repository_path(p)
        # repo = Repo(pp)
        repo = GitRepoManager()
        repo.open_repo(pp)

        if repo.smart_pull(remote=remote, branch=branch, quiet=quiet):
            repo.push(remote=remote, branch=branch)
コード例 #23
0
def create_repo_for_existing_local(repo_identifier,
                                   root,
                                   organization='NMGRLData'):
    from pychron.git_archive.repo_manager import GitRepoManager
    repo = GitRepoManager()
    proot = os.path.join(root, repo_identifier)
    repo.open_repo(proot)

    org = Organization(organization)
    if not org.has_repo(repo_identifier):
        usr = os.environ.get('GITHUB_USER')
        pwd = os.environ.get('GITHUB_PASSWORD')
        org.create_repo(repo_identifier, usr, pwd)
        url = 'https://github.com/{}/{}.git'.format(organization,
                                                    repo_identifier)
        repo.create_remote(url)
コード例 #24
0
ファイル: dvc_persister.py プロジェクト: MNGRLPychron/pychron
    def initialize(self, repository, pull=True):
        """
        setup git repos.

        repositories are guaranteed to exist. The automated run factory clones the required projects
        on demand.

        :return:
        """
        self.debug('^^^^^^^^^^^^^ Initialize DVCPersister {} pull={}'.format(repository, pull))

        self.dvc.initialize()

        repository = format_repository_identifier(repository)
        self.active_repository = repo = GitRepoManager()

        root = repository_path(repository)
        repo.open_repo(root)

        remote = 'origin'
        if repo.has_remote(remote) and pull:
            self.info('pulling changes from repo: {}'.format(repository))
            self.active_repository.pull(remote=remote, use_progress=False)
コード例 #25
0
ファイル: dvc_persister.py プロジェクト: waffle-iron/pychron
    def initialize(self, experiment, pull=True):
        """
        setup git repos.

        repositories are guaranteed to exist. The automated run factory clones the required projects
        on demand.

        :return:
        """
        self.debug('^^^^^^^^^^^^^ Initialize DVCPersister {} pull={}'.format(experiment, pull))

        self.dvc.initialize()

        experiment = format_experiment_identifier(experiment)
        self.experiment_repo = repo = GitRepoManager()

        root = os.path.join(paths.experiment_dataset_dir, experiment)
        repo.open_repo(root)

        remote = 'origin'
        if repo.has_remote(remote) and pull:
            self.info('pulling changes from experiment repo: {}'.format(experiment))
            self.experiment_repo.pull(remote=remote, use_progress=False)
コード例 #26
0
def push_repositories(ps, remote=None):
    repo = GitRepoManager()
    for p in ps:
        pp = os.path.join(paths.repository_dataset_dir, p)
        repo.open_repo(pp)
        repo.push(remote=remote)
コード例 #27
0
ファイル: dvc.py プロジェクト: waffle-iron/pychron
def push_experiments(ps):
    repo = GitRepoManager()
    for p in ps:
        pp = os.path.join(paths.experiment_dataset_dir, p)
        repo.open_repo(pp)
        repo.push()
コード例 #28
0
ファイル: func.py プロジェクト: NMGRL/pychron
def push_repositories(ps, remote=None):
    repo = GitRepoManager()
    for p in ps:
        pp = os.path.join(paths.repository_dataset_dir, p)
        repo.open_repo(pp)
        repo.push(remote=remote)
コード例 #29
0
    def _add_repository(self, dest, repository_identifier, creator,
                        create_repo):
        repository_identifier = format_repository_identifier(
            repository_identifier)

        # sys.exit()
        proot = os.path.join(paths.repository_dataset_dir,
                             repository_identifier)
        if not os.path.isdir(proot):
            # create new local repo
            os.mkdir(proot)

            repo = GitRepoManager()
            repo.open_repo(proot)

            repo.add_ignore('.DS_Store')
            self.repo_man = repo
            if create_repo:
                # add repo to central location
                create_github_repo(repository_identifier)

                url = 'https://github.com/{}/{}.git'.format(
                    ORG, repository_identifier)
                self.debug('Create repo at github. url={}'.format(url))
                repo.create_remote(url)
        else:
            repo = GitRepoManager()
            repo.open_repo(proot)

        dbexp = dest.get_repository(repository_identifier)
        if not dbexp:
            dest.add_repository(repository_identifier, creator)

        return repo
コード例 #30
0
ファイル: pyscript_task.py プロジェクト: ael-noblegas/pychron
    def _repo_manager_default(self):
        from pychron.git_archive.repo_manager import GitRepoManager

        return GitRepoManager(application=self.application)
コード例 #31
0
class GitArchiveHistory(BaseGitHistory):
    checkout_button = Button('Checkout')
    diff_button = Button
    limit = Int(100, enter_set=True, auto_set=False)

    diffable = Property(depends_on='selected')
    checkoutable = Property(depends_on='selected')
    checkout_event = Event
    diff_klass = DiffView
    auto_commit_checkouts = True

    selected = List
    selected_commit = Property(depends_on='selected')

    repo_man = Instance('pychron.git_archive.repo_manager.GitRepoManager')
    _path = Str

    def __init__(self, path=None, root=None, *args, **kw):
        super(BaseGitHistory, self).__init__(*args, **kw)
        if root:
            from pychron.git_archive.repo_manager import GitRepoManager

            self.repo_man = GitRepoManager()
            self.repo_man.open_repo(root)

        if path:
            self._path = path

    def close(self):
        pass
        # self.repo_man.close()

    def load_history(self, p=None):
        if p is None:
            p = self._path

        if p:
            self._path = p
            hx = self.repo_man.commits_iter(p, keys=['message', 'committed_date'],
                                            limit=self.limit)
            self.items = [GitShaObject(hexsha=a, message=b,
                                       date=datetime.utcfromtimestamp(c),
                                       name=p) for a, b, c in hx]

    def _selected_changed(self, new):
        if new:
            new = new[-1]
            if not new.blob:
                new.blob = self.repo_man.unpack_blob(new.hexsha, new.name)

    def _get_selected_commit(self):
        if self.selected:
            return self.selected[-1]

    def _limit_changed(self):
        self.load_history()

    def _checkout_button_fired(self):
        with open(self._path, 'w') as wfile:
            wfile.write(self.selected_commit.blob)

        if self.auto_commit_checkouts:
            self.repo_man.add(self._path,
                              msg_prefix='checked out')
            self.load_history()

        self.selected = self.items[:1]
        self.checkout_event = self._path

    def _diff_button_fired(self):
        a, b = self.selected
        d = self.repo_man.diff(a.hexsha, b.hexsha)
        if not a.blob:
            a.blob = self.repo_man.unpack_blob(a.hexsha, a.name)

        if not b.blob:
            b.blob = self.repo_man.unpack_blob(b.hexsha, b.name)

        ds = '\n'.join([li for li in d.split('\n')
                        if li[0] in ('-', '+')])

        lm = a.message
        n = 40
        if len(lm) > n:
            lm = '{}...'.format(lm[:n])

        rm = a.message
        if len(rm) > n:
            rm = '{}...'.format(rm[:n])

        dd = self.diff_klass(left=a.blob, left_date=a.date.strftime('%m-%d-%Y %H:%M:%S'), left_message=lm,
                             right=b.blob, right_date=b.date.strftime('%m-%d-%Y %H:%M:%S'), right_message=rm,
                             diff=ds)

        dd.edit_traits()
        # dd.configure_traits()

    def _get_diffable(self):
        if self.selected:
            return len(self.selected) == 2

    def _get_checkoutable(self):
        if self.selected:
            return len(self.selected) == 1
コード例 #32
0
class GitArchiveHistory(BaseGitHistory):
    checkout_button = Button('Checkout')
    diff_button = Button
    limit = Int(100, enter_set=True, auto_set=False)

    diffable = Property(depends_on='selected')
    checkoutable = Property(depends_on='selected')
    checkout_event = Event
    diff_klass = DiffView
    auto_commit_checkouts = True

    selected = List
    selected_commit = Property(depends_on='selected')

    repo_man = Instance('pychron.git_archive.repo_manager.GitRepoManager')
    _path = Str

    def __init__(self, path=None, root=None, *args, **kw):
        super(BaseGitHistory, self).__init__(*args, **kw)
        if root:
            from pychron.git_archive.repo_manager import GitRepoManager

            self.repo_man = GitRepoManager()
            self.repo_man.open_repo(root)

        if path:
            self._path = path

    def close(self):
        pass
        # self.repo_man.close()

    def load_history(self, p=None):
        if p is None:
            p = self._path

        if p:
            self._path = p
            hx = self.repo_man.commits_iter(p,
                                            keys=['message', 'committed_date'],
                                            limit=self.limit)
            self.items = [
                GitSha(hexsha=a,
                       message=b,
                       date=datetime.utcfromtimestamp(c),
                       name=p) for a, b, c in hx
            ]

    def _selected_changed(self, new):
        if new:
            new = new[-1]
            if not new.blob:
                new.blob = self.repo_man.unpack_blob(new.hexsha, new.name)

    def _get_selected_commit(self):
        if self.selected:
            return self.selected[-1]

    def _limit_changed(self):
        self.load_history()

    def _checkout_button_fired(self):
        with open(self._path, 'w') as wfile:
            wfile.write(self.selected_commit.blob)

        if self.auto_commit_checkouts:
            self.repo_man.add(self._path, msg_prefix='checked out')
            self.load_history()

        self.selected = self.items[:1]
        self.checkout_event = self._path

    def _diff_button_fired(self):
        a, b = self.selected
        d = self.repo_man.diff(a.hexsha, b.hexsha)
        if not a.blob:
            a.blob = self.repo_man.unpack_blob(a.hexsha, a.name)

        if not b.blob:
            b.blob = self.repo_man.unpack_blob(b.hexsha, b.name)

        ds = '\n'.join([li for li in d.split('\n') if li[0] in ('-', '+')])

        lm = a.message
        n = 40
        if len(lm) > n:
            lm = '{}...'.format(lm[:n])

        rm = a.message
        if len(rm) > n:
            rm = '{}...'.format(rm[:n])

        dd = self.diff_klass(left=a.blob,
                             left_date=a.date.strftime('%m-%d-%Y %H:%M:%S'),
                             left_message=lm,
                             right=b.blob,
                             right_date=b.date.strftime('%m-%d-%Y %H:%M:%S'),
                             right_message=rm,
                             diff=ds)

        dd.edit_traits()
        # dd.configure_traits()

    def _get_diffable(self):
        if self.selected:
            return len(self.selected) == 2

    def _get_checkoutable(self):
        if self.selected:
            return len(self.selected) == 1
コード例 #33
0
 def clone_from(self, name, root, organization):
     url = self.make_url(name, organization)
     GitRepoManager.clone_from(url, root)