longname.py 文件源码

python
阅读 17 收藏 0 点赞 0 评论 0

项目:rdiff-backup 作者: sol1 项目源码 文件源码
def get_next_free():
    """Return next free filename available in the long filename directory"""
    global free_name_counter
    def scan_next_free():
        """Return value of free_name_counter by listing long filename dir"""
        log.Log("Setting next free from long filenames dir", 5)
        cur_high = 0
        for filename in get_long_rp().listdir():
            try: i = int(filename.split('.')[0])
            except ValueError: continue
            if i > cur_high: cur_high = i
        return cur_high + 1

    def read_next_free():
        """Return next int free by reading the next_free file, or None"""
        rp = get_long_rp(counter_filename)
        if not rp.lstat(): return None
        return int(rp.get_data())

    def write_next_free(i):
        """Write value i into the counter file"""
        rp = get_long_rp(counter_filename)
        if rp.lstat(): rp.delete()
        rp.write_string(str(free_name_counter))
        rp.fsync_with_dir()

    if not free_name_counter: free_name_counter = read_next_free()
    if not free_name_counter: free_name_counter = scan_next_free()
    filename = str(free_name_counter)
    rp = get_long_rp(filename)
    assert not rp.lstat(), "Unexpected file at %s found" % (rp.path,)
    free_name_counter += 1
    write_next_free(free_name_counter)
    return filename
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号