Как очистить единственную регистрацию текущей ветки в ископаемом?

Я использую ископаемое для какой-то инкрементной резервной базы данных. Пока это работает очень хорошо, за исключением очистки старых записей. Поскольку все это автоматизировано и должно быть простым, все проверки/откаты работают на магистрали.

Теперь я попытался добавить возможность очистки старых проверок, но я не могу, всегда получая сообщение об ошибке:

cannot purge the current checkout

Возможно, я неправильно использую очистку, хотя я не смог найти, как это сделать правильно. В настоящее время я добавляю тег к проверкам, которые хочу удалить, и пытаюсь их очистить, что не работает. Удаление тега trunk из этих чекинов ничего не меняет. Запуск очистки, когда мой локальный репозиторий закрыт, невозможен, так как для этой операции ископаемым требуется таблица vvar.

Я сделал пример, чтобы проиллюстрировать:

D:\_tmp\repo>fossil init test
project-id: d16c0c72d95305884776f5c6e4d440ec687511a3
server-id:  1de96e7234a3e2b6561a31ad0cb9d55243be0bdb
admin-user: usr (initial password is "9dd6fb")

D:\_tmp\repo>fossil open test
project-name: <unnamed>
repository:   D:/_tmp/repo/test
local-root:   D:/_tmp/repo/
config-db:    C:/Users/usr/AppData/Local/_fossil
project-code: d16c0c72d95305884776f5c6e4d440ec687511a3
checkout:     48edad6b8a3a946ad92b96bc41a2911ee709d6b5 2015-08-20 12:54:17 UTC
leaf:         open
tags:         trunk
comment:      initial empty check-in (user: usr)
check-ins:    1

D:\_tmp\repo>fossil addremove
ADDED  closedpurge.txt
added 1 files, deleted 0 files

D:\_tmp\repo>fossil commit -m auto
./closedpurge.txt contains CR/NL line endings. Use --no-warnings or the "crnl-gl
ob" setting to disable this warning.
Commit anyhow (a=all/c=convert/y/N)? a
New_Version: 3ffebd89c0d7e8ac92a21f3a0085568c39e113ea

D:\_tmp\repo>fossil addremove
DELETED  closedpurge.txt
added 0 files, deleted 1 files

D:\_tmp\repo>fossil commit -m auto
New_Version: be0ac15264616ce86f0fce0b8a2de05c80ea3e0b

D:\_tmp\repo>fossil timeline
=== 2015-08-20 ===
12:55:05 [be0ac15264] *CURRENT* auto (user: usr tags: trunk)
12:54:47 [3ffebd89c0] auto (user: usr tags: trunk)
12:54:17 [48edad6b8a] initial empty check-in (user: usr tags: trunk)
+++ no more data (3) +++

D:\_tmp\repo>fossil tag add topurge 3ffebd89c0

D:\_tmp\repo>fossil timeline
=== 2015-08-20 ===
12:56:37 [98c3a4f991] Edit [3ffebd89c0d7e8ac|3ffebd89c0]: Add tag "topurge".
         (user: usr)
12:55:05 [be0ac15264] *CURRENT* auto (user: usr tags: trunk)
12:54:47 [3ffebd89c0] auto (user: usr tags: trunk, topurge)
12:54:17 [48edad6b8a] initial empty check-in (user: usr tags: trunk)
+++ no more data (4) +++

D:\_tmp\repo>fossil purge topurge
cannot purge the current checkout

D:\_tmp\repo>fossil tag cancel trunk 3ffebd89c0

D:\_tmp\repo>fossil timeline
=== 2015-08-20 ===
12:57:30 [21885761c2] Edit [3ffebd89c0d7e8ac|3ffebd89c0]: Cancel tag "trunk".
         (user: usr)
12:56:37 [98c3a4f991] Edit [3ffebd89c0d7e8ac|3ffebd89c0]: Add tag "topurge".
         (user: usr)
12:55:05 [be0ac15264] *CURRENT* auto (user: usr)
12:54:47 [3ffebd89c0] auto (user: usr tags: topurge)
12:54:17 [48edad6b8a] initial empty check-in (user: usr tags: trunk)
+++ no more data (5) +++

D:\_tmp\repo>fossil purge topurge
cannot purge the current checkout

D:\_tmp\repo>fossil close

D:\_tmp\repo>fossil purge topurge -R test
SQLITE_ERROR: no such table: vvar
fossil: no such table: vvar
SELECT value FROM vvar WHERE name='checkout'

Все, что я сделал, это инициализировал новое хранилище окаменелостей; добавить один файл и зафиксировать; удалить файл и снова зафиксировать; и попробуй очистить чек, в котором добавил файл.

Редактировать: я тестировал это, используя ископаемые версии 1.32 и 1.33.


person Sors    schedule 20.08.2015    source источник


Ответы (1)


Сообщение об ошибке говорит само за себя: вы не можете очистить текущую кассу (это чекин, помеченный как *CURRENT* на временной шкале) или один из его потомков. Из справки по команде purge (выделено мной):

Переместите проверки, идентифицированные TAGS, и все их потомки из репозитория (…)

Решение состоит в том, чтобы update или checkout перейти к другому возврату, который не зависит от возврата, подлежащего очистке перед выполнением очистки.

person Martijn    schedule 20.08.2015
comment
К сожалению, это не похоже на решение. Если вы посмотрите на пример, вы увидите, что [be0ac15264] — это касса *CURRENT*, и только [3ffebd89c0] помечен как topurge. Таким образом, fossil purge topurge не должен применяться к *CURRENT* кассе. - person Sors; 21.08.2015
comment
@Sors, ​​вы не можете очистить текущую кассу или одного из ее предков. Я обновил свой ответ, включив в него эту важную информацию. - person Martijn; 21.08.2015
comment
Спасибо, эта часть для меня отсутствовала, но если я правильно понимаю, это делает невозможным очистку одиночных проверок в моем случае (удаление ранней регистрации магистрали), и вместо этого я должен избегать соответствующих файлов? - person Sors; 21.08.2015
comment
@ Сорс Это правильно. Проблема в том, что Fossil спроектирован таким образом, чтобы никогда не терять информацию. Целью purge является удаление ветки после того, как она перестала быть полезной. - person Martijn; 21.08.2015