Exemplo n.º 1
0
def find_setup(srcname):
    if os.path.isabs(srcname):
        return srcname

    user_dir = resource.user_resource_dir(resource.setup_dir)
    release_dir = resource.get_release_dir('state')

    user_setups = [
        os.path.basename(x)
        for x in resource.glob_glob(os.path.join(user_dir, '*'))
    ]
    factory_setups = [
        os.path.basename(x)
        for x in resource.glob_glob(os.path.join(release_dir, '*'))
    ]

    for s in user_setups:
        if s == srcname:
            return os.path.join(user_dir, s)
        s2 = upgrade.split_setup(s)
        if s2[1] == srcname:
            return os.path.join(user_dir, s)

    for s in factory_setups:
        if s == srcname:
            return os.path.join(release_dir, s)
        s2 = upgrade.split_setup(s)
        if s2[1] == srcname:
            return os.path.join(release_dir, s)

    return None
Exemplo n.º 2
0
def upgradeable_old_setups():
    md = resource.user_resource_dir(resource.setup_dir)

    slots = [
        upgrade.split_setup(os.path.basename(s))[1]
        for s in resource.glob_glob(os.path.join(md, '*'))
    ]

    releases = {}

    for v in resource.find_installed_versions(filter_upgradeable_version):
        rd = resource.user_resource_dir(resource.setup_dir, version=v)
        (vs, ts) = resource.split_version(v)
        for (sp, sd, sn) in resource.safe_walk(rd):
            sd = ()
            for s in filter(filter_valid_setup, sn):
                slot = upgrade.split_setup(s)[1]

                if slot in slots:
                    continue

                vf = os.path.join(rd, s)
                mf = os.path.join(md, s)

                if not s in releases or vs > releases[s][0]:
                    if s not in releases:
                        releases[s] = (vs, vf, v)
                        slots.append(slot)

    mapping = []
    for (n, (vs, vf, v)) in releases.items():
        mapping.append((os.path.join(md, n), vf, v))

    return mapping
Exemplo n.º 3
0
def delete_user_slot(slot):
    slot = slot.strip()
    rd = resource.user_resource_dir(resource.setup_dir)
    for (sp, sd, sn) in resource.safe_walk(rd):
        for s in sn:
            s3 = upgrade.split_setup(s)
            if s3[1] == slot:
                resource.os_unlink(os.path.join(rd, s))
Exemplo n.º 4
0
def filter_valid_setup(s):
    if s.startswith('tmpsetup') or '.' in s or '#' in s or s.startswith('~'):
        return False

    s2 = upgrade.split_setup(s)

    if translate.words_to_notes(s2[1]):
        return True

    return False
Exemplo n.º 5
0
def find_factory_setups():
    rd = resource.get_release_dir('state')
    m = Menu('Factory Setups')

    for (sp, sd, sn) in resource.safe_walk(rd):
        for s in filter(filter_valid_setup, sn):
            s3 = upgrade.split_setup(s)
            m.add_setup(urllib.unquote(s3[0]), s3[1], os.path.join(rd, s),
                        False, False)

    return m
Exemplo n.º 6
0
def find_user_setups():
    rd = resource.user_resource_dir(resource.setup_dir)
    m = Menu('User Setups')

    for (sp, sd, sn) in resource.safe_walk(rd):
        for s in filter(filter_valid_setup, sn):
            s3 = upgrade.split_setup(s)
            m.add_setup(urllib.unquote(s3[0]), s3[1], os.path.join(rd, s),
                        False, True)

    return m
Exemplo n.º 7
0
def get_setup_slot(slot):
    slot = slot.strip()
    rd = resource.user_resource_dir(resource.setup_dir)

    for (sp, sd, sn) in resource.safe_walk(rd):
        for s in filter(filter_valid_setup, sn):
            s3 = upgrade.split_setup(s)
            if s3[1] == slot:
                # unencode url encoded illegal chars to display them properly
                return urllib.unquote(s3[0]) or 'none'

    return ''
Exemplo n.º 8
0
def find_old_setups():
    m = Menu("Previous Versions")

    for v in resource.find_installed_versions(filter_upgradeable_version):
        rd = resource.user_resource_dir(resource.setup_dir, version=v)
        for (sp, sd, sn) in resource.safe_walk(rd):
            sd = ()
            sv = filter(filter_valid_setup, sn)
            if sv:
                m2 = Menu(v)
                for s in sv:
                    s3 = upgrade.split_setup(s)
                    m2.add_setup(urllib.unquote(s3[0]), s3[1],
                                 os.path.join(rd, s), True, False)
                m.add_child(m2)

    return m
Exemplo n.º 9
0
def find_user_setups_flat():
    rd = resource.user_resource_dir(resource.setup_dir)

    t = piw.term("tree", 0)
    t.add_arg(-1, piw.term(piw.makestring('user setups', 0)))

    for (sp, sd, sn) in resource.safe_walk(rd):
        for s in filter(filter_valid_setup, sn):
            t3 = piw.term('leaf', 0)
            s3 = upgrade.split_setup(s)
            # unencode url encoded illegal chars to display them properly
            name = piw.term(piw.makestring(urllib.unquote(s3[0]),
                                           0)) if s3[0] else piw.term()
            slot = piw.term(piw.makestring(s3[1], 0))
            t3.add_arg(-1, name)
            t3.add_arg(-1, slot)
            t3.add_arg(-1, piw.term(piw.makestring(os.path.join(rd, s), 0)))
            t3.add_arg(-1, piw.term(piw.makebool(False, 0)))
            t3.add_arg(-1, piw.term(piw.makebool(True, 0)))
            t.add_arg(-1, t3)

    return t
Exemplo n.º 10
0
    def load_file(self,path,upgrade_flag = False,post_load = True):

        while self.__busy is not None:
            print 'waiting for current load/save operation to complete'
            r = async.Deferred()
            self.__busy.append(r)
            self.__abort = True
            self.call_load_status()
            yield r

        self.__busy = []
        self.__abort = False
        label = upgrade.split_setup(os.path.basename(path))[1]

        self.__backend.load_started(label)
        self.__backend.stop_gc()
        self.call_load_status('Preparing',0)

        if self.__abort:
            yield async.Coroutine.success('aborted')

        snapshot = self.__backend.run_foreground_sync(upgrade.prepare_file,path,version.version)
        print 'loading from version',snapshot.version(),'in',path
        agents = set(all_agents(snapshot))

        for m in self.index.members():
            if self.__abort:
                yield async.Coroutine.success('aborted')

            ma = m.address
            m.enable_save(False)
            if ma in agents:
                qa = self.index.to_absolute(ma)
                r = rpc.invoke_rpc(qa,'preload',path)
                yield r

        r = self.__load1(snapshot,label,path)
        yield r
        yield self.index.sync()
        e = r.args()[0]

        if post_load:
            self.call_load_status('Final Initialisation',100)
            yield self.post_load(path)

        self.call_load_status('Cleaning up',100)
        yield timeout.Timer(1000)

        self.__backend.start_gc()

        if e:
            self.__backend.load_ended(e)
        else:
            self.__backend.load_ended()

        if self.__busy:
            busy_copy = self.__busy[:]
            self.__busy = None
            for b in busy_copy:
                b.succeeded()
        else:
            self.__busy = None

        yield async.Coroutine.completion(r.status(),e)