LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

«Сбросить изменённые данные» это не бекап а автосохранение. А бекап - это когда ты редактируешь файл, сохраняешь его (вручную), а программа перед этой записью новых данных переименовывает старый. Само сохранение в любом случае будет на тот же диск и если диск медленный - сохранение медленное.

А тот код что ты привёл делает именно бекап, но не переименование а зачем-то копию - это медленно да. Переименование было бы как-то так:

        if VIA_TEMPFILE_MAKES_BACKUP_COPY:
            suffix = VIA_TEMPFILE_BACKUP_COPY_SUFFIX
            backup_basename = "%s%s%s" % (stemname, ext, suffix)
            backup_path = os.path.join(user_specified_dirname, backup_basename)
            if os.path.exists(target_path):
                if os.path.exists(backup_path):
                    logger.debug("Removing old backup %r", backup_path)
                logger.debug("Making new backup %r", backup_path)
                os.rename(target_path, backup_path)
                assert os.path.exists(backup_path)

(как в питоне делать переименование я не знаю, предположим что os.rename)

Я, разумеется, не рекомендую бездумно использовать этот код, ведь я не знаю зачем в mypaint копирование вместо переименования. Но есть вероятность что он исправит проблему и не создаст других.

This decorator wraps save methods which operate only on filenames to write to tempfiles in the same location. Rename is then used to atomically overwrite the original file, where possible.

А, кажется он хочет чтобы файл с оригинальным названием всегда присутствовал, а если мы его переименуем то будет промежуток времени, когда его нет. Ради этого делать тяжёлое бесполезное копирование - это нубство, задача гораздо лучше решается хардлинками, примерно так:

        if VIA_TEMPFILE_MAKES_BACKUP_COPY:
            suffix = VIA_TEMPFILE_BACKUP_COPY_SUFFIX
            backup_basename = "%s%s%s" % (stemname, ext, suffix)
            backup_path = os.path.join(user_specified_dirname, backup_basename)
            if os.path.exists(target_path):
                if os.path.exists(backup_path):
                    logger.debug("Removing old backup %r", backup_path)
                    os.remove(backup_path)
                logger.debug("Making new backup %r", backup_path)
                os.link(target_path, backup_path)
                assert os.path.exists(backup_path)
os.link() - это опять же предположение, как сделать хардлинк питоном ищите сами если кому надо.

Исправление firkax, :

«Сбросить изменённые данные» это не бекап а автосохранение. А бекап - это когда ты редактируешь файл, сохраняешь его (вручную), а программа перед этой записью новых данных переименовывает старый.

А тот код что ты привёл делает именно бекап, но не переименование а зачем-то копию - это медленно да. Переименование было бы как-то так:

        if VIA_TEMPFILE_MAKES_BACKUP_COPY:
            suffix = VIA_TEMPFILE_BACKUP_COPY_SUFFIX
            backup_basename = "%s%s%s" % (stemname, ext, suffix)
            backup_path = os.path.join(user_specified_dirname, backup_basename)
            if os.path.exists(target_path):
                if os.path.exists(backup_path):
                    logger.debug("Removing old backup %r", backup_path)
                logger.debug("Making new backup %r", backup_path)
                os.rename(target_path, backup_path)
                assert os.path.exists(backup_path)

(как в питоне делать переименование я не знаю, предположим что os.rename)

Я, разумеется, не рекомендую бездумно использовать этот код, ведь я не знаю зачем в mypaint копирование вместо переименования. Но есть вероятность что он исправит проблему и не создаст других.

This decorator wraps save methods which operate only on filenames to write to tempfiles in the same location. Rename is then used to atomically overwrite the original file, where possible.

А, кажется он хочет чтобы файл с оригинальным названием всегда присутствовал, а если мы его переименуем то будет промежуток времени, когда его нет. Ради этого делать тяжёлое бесполезное копирование - это нубство, задача гораздо лучше решается хардлинками, примерно так:

        if VIA_TEMPFILE_MAKES_BACKUP_COPY:
            suffix = VIA_TEMPFILE_BACKUP_COPY_SUFFIX
            backup_basename = "%s%s%s" % (stemname, ext, suffix)
            backup_path = os.path.join(user_specified_dirname, backup_basename)
            if os.path.exists(target_path):
                if os.path.exists(backup_path):
                    logger.debug("Removing old backup %r", backup_path)
                    os.remove(backup_path)
                logger.debug("Making new backup %r", backup_path)
                os.link(target_path, backup_path)
                assert os.path.exists(backup_path)
os.link() - это опять же предположение, как сделать хардлинк питоном ищите сами если кому надо.

Исходная версия firkax, :

«Сбросить изменённые данные» это не бекап а автосохранение. А бекап - это когда ты редактируешь файл, сохраняешь его (вручную), а программа перед этой записью новых данных переименовывает старый.

А тот код что ты привёл делает не переименование а зачем-то копию - это медленно да. Переименование было бы как-то так:

        if VIA_TEMPFILE_MAKES_BACKUP_COPY:
            suffix = VIA_TEMPFILE_BACKUP_COPY_SUFFIX
            backup_basename = "%s%s%s" % (stemname, ext, suffix)
            backup_path = os.path.join(user_specified_dirname, backup_basename)
            if os.path.exists(target_path):
                if os.path.exists(backup_path):
                    logger.debug("Removing old backup %r", backup_path)
                logger.debug("Making new backup %r", backup_path)
                os.rename(target_path, backup_path)
                assert os.path.exists(backup_path)

(как в питоне делать переименование я не знаю, предположим что os.rename)

Я, разумеется, не рекомендую бездумно использовать этот код, ведь я не знаю зачем в mypaint копирование вместо переименования. Но есть вероятность что он исправит проблему и не создаст других.

This decorator wraps save methods which operate only on filenames to write to tempfiles in the same location. Rename is then used to atomically overwrite the original file, where possible.

А, кажется он хочет чтобы файл с оригинальным названием всегда присутствовал, а если мы его переименуем то будет промежуток времени, когда его нет. Ради этого делать тяжёлое бесполезное копирование - это нубство, задача гораздо лучше решается хардлинками, примерно так:

        if VIA_TEMPFILE_MAKES_BACKUP_COPY:
            suffix = VIA_TEMPFILE_BACKUP_COPY_SUFFIX
            backup_basename = "%s%s%s" % (stemname, ext, suffix)
            backup_path = os.path.join(user_specified_dirname, backup_basename)
            if os.path.exists(target_path):
                if os.path.exists(backup_path):
                    logger.debug("Removing old backup %r", backup_path)
                    os.remove(backup_path)
                logger.debug("Making new backup %r", backup_path)
                os.link(target_path, backup_path)
                assert os.path.exists(backup_path)
os.link() - это опять же предположение, как сделать хардлинк питоном ищите сами если кому надо.