LINUX.ORG.RU

Это встроенная функцинальность создания бекапа. Не отключается. Решением вижу использовать программу, которая не создает бекап автоматически.

UPD: Хотя вру, вроде отключается редактированием исходников, вроде что то вроде *_MAKES_BACKUP_COPY. Надо поменять на false.

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)
Ответ на: комментарий от caryoscelus

Those are backup files, made for safety when there’s a pre-existng file having the same name. Nobody has complained about it till now 😄 See #203 for earlier discussion. You’re a Windows user, by the looks of it… would you prefer .ora.bak on that platform? *~ is hidden on Linux much of the time

Это С# из нормальных людей хамло делает, да?

PPP328 ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Только что проверил.

/usr/lib/mypaint/lib/fileutils.py
-VIA_TEMPFILE_MAKES_BACKUP_COPY = True
+VIA_TEMPFILE_MAKES_BACKUP_COPY = False

Больше файлов бекапа нету. Сам не замечал но

dron@gnu:~$ ls -hla | grep '~'
-rw-r--r--   1 dron dron  52K авг 20 20:20 1500px.jpg~
-rw-r--r--   1 dron dron 3,3M июн 23 17:46 dlmmlz4sxcc71.png~
-rw-r--r--   1 dron dron  29K июн 28 16:09 g.png~
-rw-r--r--   1 dron dron 1,8M июн 10 20:11 Manjaro-logo.svg.png~
-rw-r--r--   1 dron dron 181K мая 16 19:07 option-1.webp~
-rw-r--r--   1 dron dron 2,0M июн  8 21:19 support.png~
-rw-r--r--   1 dron dron 5,9K окт 14 21:48 tux.png~
dron@gnu:~$

Это только в хомяке, а так оно везде кучками разбросано. По хорошему должна быть опция где просто указать каталог куда складывать бекапы. Кому надо на внешний носитель будет кидать боясь потерять художество, кому не надо в /tmp/trash будут совать, а кому вообще не надо вообще ничего не укажут и будет сохраняться в текущий каталог файла оригинала.

P.S. Если у тебя AppImage то распаковать, поменять, запаковать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от caryoscelus

Пардон, перепутал с paint.net. Хорошо, питон делает из людей хамло? Вместо того, чтобы нормально обсудить решение и такие файлы размещать в /tmp/mypaint/backup разрабы переходят на личности с фразой «слыш, ты ж виндузятник, жри чо дают, ты привыкший»

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Так никто не делает. Бекапы всегда создаются рядом с основным файлом, чтобы если накосячишь с оригиналом можно было легко восстановить из бекапа.

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)
Ответ на: комментарий от vbcnthfkmnth123

То что так никто не делает - не значит что так не нужно делать. Чем нахождение файла в отдельной директории помешает его открыть? Зато подобные редакторы засирают те каталоги где лежат оригиналы.

PPP328 ★★★★★
()
Ответ на: комментарий от wandrien

Спросить у пользователя. Создать имя с частью хэша. Да миллион способов, лишь бы оно не засирало всё вокруг себя ~ файлами. У Криты похожая проблема, из-за которой нельзя открывать файлы на внешних HDD. Потому что при автосохранении бекапа всё вешается на 5 минут, пока гиговый файл на этот самый HDD запишется.

PPP328 ★★★★★
()
Ответ на: комментарий от wandrien

не записывая его?

Еще раз. У системы есть специальная директория, в которой можно хранить такие файлы. Даже две. /tmp и /home/user/.cache . Система априори стоит на самом быстром носителе, а многие /tmp хранят в tmpfs, что еще быстрее. Зачем мне эти программы пытаются писать бекап на внешний медленный диск, на котором и места то может не быть.

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)
Ответ на: комментарий от PPP328

Я не знаю, зачем тебе программы «пытаются писать бэкап на внешний диск», учитывая тот факт, что программы обычно никуда бэкап не «пишут». Время работы renameat(2) от размера файла не зависит, и никуда никакие файлы он не пишет.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 3)
Ответ на: комментарий от wandrien

Я не знаю, зачем тебе программы «пытаются писать бэкап на внешний диск»

Перечтите тред и обсуждение. Krita и Mypaint пишут бекап файла в ту же директорию, где и сам файл. Если я открыл файл с внешнего диска, где у меня отдельное хранилище фоток - то эти заразы туда и срут. И никакой renameat вам не поможет, потому что это внешний диск.

PPP328 ★★★★★
()
Ответ на: комментарий от wandrien

Не вижу логики.

renameat работает мгновенно в пределах одного диска. Он не может магическим образом мгновенно записать на медленный внешний HDD

программы обычно никуда бэкап не «пишут»

У вас всё хорошо? Вы понимаете в каком треде находитесь? Тут обсуждают то, что mypaint пишет бекап картинки в тот же каталог.

PPP328 ★★★★★
()
Ответ на: комментарий от arrecck

В смысле? Создание бекапа это не баг. Это как создать багрепорт для nano или vim что они создают бекапы. Это так и задумано.

https://github.com/mypaint/mypaint/wiki/v1.2-Backup-Files-and-Autosaves

vbcnthfkmnth123 ★★★★★
()
Последнее исправление: vbcnthfkmnth123 (всего исправлений: 1)
Ответ на: комментарий от PPP328

Причём тут внешний hdd и другой диск если бекап создаётся в той же директории? И создаётся он не методом записывания файла ещё раз а как раз с помощью rename или renameat.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Причём тут внешний hdd и другой диск если бекап создаётся в той же директории?

Господи, тут появится человек что читает сообщения или нет? При открытии файла с внешнего диска, срать он будет в ту же директорию, в тот же внешний диск. И rename тут слабо помогает:

        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)
                with open(target_path, 'rb') as target_fp:
                    with open(backup_path, 'wb') as backup_fp:
                        logger.debug("Making new backup %r", backup_path)
                        shutil.copyfileobj(target_fp, backup_fp)
                        backup_fp.flush()
                        os.fsync(backup_fp.fileno())
                assert os.path.exists(backup_path)

Вам всё равно нужно сбросить на диск те данные, которые сейчас изменены. rename используется только для подмены старого бекапа новым.

    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.

Это никак не поможет с тем, что вам надо записать огромный бекап на диск и дождаться его flush.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

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

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

        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 ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от PPP328

У вас всё хорошо? Вы понимаете в каком треде находитесь? Тут обсуждают то, что mypaint пишет бекап картинки в тот же каталог.

Как это воспроизвести? Специально открыл файл в майпайнт, пошевелил там кистями, заливками. Никакой бекап в директории с файлом не появился. Что нужно сделать, чтобы его увидеть?

П.С. Сохранил свое творение как черновик. В хомяке появилась директория ~/MyPaint/ в которой образовался файл scrapXXX.ora

Директорию можно переопределить в настройках.

П.П.С. Нашел еще в ~/cache/mypaint свой файл. В исходной директории ничего не появляется.

utanho ★★★★★
()
Последнее исправление: utanho (всего исправлений: 3)
Ответ на: комментарий от burato

он на арме не соберётся скорее всего

Правда?

Вот инструкция по сборке и сам репозиторий программы. Это, кстати, один из самых легковесных графических редакторов с достаточно богатым функционалом для повседневного редактирования изображений и рисования. Работает на xlib вместо тулкитов (вроде).

Goat ★★
()