2015-08-20 3 views
2

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

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

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' 

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

Edit: Я проверил это, используя ископаемое версии 1,32 и 1,33

ответ

2

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

Перемещение контрольных модулей, определенных TAGS и всех их потомков из хранилища (...)

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

+0

К сожалению, это не похоже на решение. Если вы проверите пример, вы увидите, что '[be0ac15264]' - это '* CURRENT *' checkout, и только '[3ffebd89c0]' помечен как «topurge». Таким образом, 'Fossil purge topurge' не должен применяться к' * CURRENT * 'checkout – Sors

+0

@Sors, ​​вы не можете очистить текущий чек или один из его предков. Я обновил свой ответ, чтобы включить этот важный бит информации. – Martijn

+0

Спасибо, что эта часть мне не нужна, но если я правильно понимаю, это делает невозможным очистить отдельные проверки в моем случае (очистка ранней проверки сундука), и вместо этого мне нужно избегать соответствующих файлов? – Sors