Удалить все локальные закладки из репозитория Mercurial - PullRequest
1 голос
/ 04 июля 2019

hg bookmarks --delete можно использовать для удаления закладки.

Можно ли как-нибудь удалить все закладки в репозитории Mercurial с помощью какого-либо bash-скрипта? Я думаю, что это возможно при использовании awk, но это немного за мной.

Формат вывода hg bookmarks (например):

2018.02.706 Customer App 5255:c1321f7f3903
2018.02.707 Customer App 5255:c1321f7f3902

Мне нужно получить только:

2018.02.706 Customer App
2018.02.707 Customer App

Ответы [ 6 ]

2 голосов
/ 05 июля 2019

Я думаю это решение (с некоторыми возможными необходимыми исправлениями) будет проще и естественнее, чем awk-ing: чистый Mercurial, ничего более

2 голосов
/ 04 июля 2019

Это должно удалить последнее поле:

awk 'NF{NF--}1' file

Это просто устанавливает последнее поле в ничто:

awk '{$NF=""}1' file
1 голос
/ 09 июля 2019

Если вы действительно хотите удалить все закладки, просто удалите файл .hg/bookmarks из скрытого каталога .hg вашего репо.

Закладки могут возвращаться, если вы извлекаете их из удаленного местоположения, поэтому вам также нужно будет сделать hg book push -B 'your bookmark name', чтобы удалить закладку из удаленного местоположения, но это проблема, с которой вы столкнетесь при использовании любого другого метода. для удаления закладок.

1 голос
/ 05 июля 2019

Принимая во внимание помощь, полученную в предыдущих ответах, вот полный сценарий, который я использовал для удаления ртутных закладок:

hg bookmarks | awk 'NF' | awk 'sub($NF,"")' | awk '{print "hg bookmarks --delete \047" $0 "\047"}' > clear-bookmarks.sh

Используйте следующее, если хотите убедиться, что начальные и конечные пробелы удалены:

hg bookmarks | awk 'NF' | awk 'sub($NF,"")' | awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' | awk '{print "hg bookmarks --delete \047" $0 "\047"}' > clear-bookmarks.sh

Мой опыт написания сценариев не удивителен ни в коем случае - но, похоже, он делает свою работу!

1 голос
/ 05 июля 2019
awk 'sub($NF,"")' file

2018.02.706 Customer App 

2018.02.707 Customer App
0 голосов
/ 05 июля 2019

Предполагая, что пробелы во входных данных являются пустыми символами в том виде, в каком они отображаются в образце входных данных, чтобы сделать то, что вы просили в своем вопросе, переносимо и надежно, это:

$ sed 's/ [^ ]*$//' file
2018.02.706 Customer App
2018.02.707 Customer App

и получить вывод командыстрока в ваш ответ будет выглядеть так:

$ sed 's/\(.*\) .*$/hg bookmarks --delete '\''\1'\''/' file
hg bookmarks --delete '2018.02.706 Customer App'
hg bookmarks --delete '2018.02.707 Customer App'

Если вы чувствуете жгучее желание использовать awk, тогда это будет:

$ awk '{sub(/ [^ ]+$/,"")}1' file
2018.02.706 Customer App
2018.02.707 Customer App

$ awk '{sub(/ [^ ]+$/,""); print "hg bookmarks --delete \047" $0 "\047"}' file
hg bookmarks --delete '2018.02.706 Customer App'
hg bookmarks --delete '2018.02.707 Customer App'

Заменить / [^ ]+$/ с /[[:space:]]+[^[:space:]]+$/, если в вашем примере пробел может быть чем-то отличным от одного пустого символа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...