LINUX.ORG.RU

[hg][mq] ищу компон^wрасширение


0

3

Товарищи, есть ли готовые рецепты, облегчающие работу с mq? После stgit это какой-то адов конструктор — есть только базовые вещи и всё руками, да руками, как мартышка какая-то.

Может есть обертка, которая может:

1. По содержимому коммита назвать патч. Например:

~/work/project$ hg qnew -m 'This is a cool feature...'
~/work/project(this-is-a-cool)$

2. Может делать qrefresh на любой патч, а не только текущий. Сейчас это пренеприятная конструкция из qnew tmp, qgoto patch, qfold tmp и qpush (казалось бы, это же киллер фича, ан нет, дудки).

3. bash prompt для вывода текущего патча и количества не примененных патчей (пока довольствуюсь отвратительным лисопедом).

Ищу аналог git add, git diff --cached и git commit.
В mercurial ужасно неудобно коммитить отдельные наборы файлов:
hg commit path/to/file1 path/to/file2 etc ...

anonymous ()

1 - а тебе оно вот прямо так часто надо? Т.е. по-моему в большинстве случаев патч будет называться cool-feature, а никак не this-is-a-cool.

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

(получился ответ в стиле «нет - значит не нужно»)

gaga ()
Ответ на: комментарий от anonymous

Ищу аналог git add, git diff --cached и git commit.

Аналог в плане чего? аналог add и commit - hg commit. Т.к. в ртути нет индекса, то и --cached не имеет смысла. Для этого используют mq.

В mercurial ужасно неудобно коммитить отдельные наборы файлов: hg commit path/to/file1 path/to/file2 etc ...

А в гите как это делается? По теме - Crecord либо гуй.

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

Т.е. по-моему в большинстве случаев патч будет называться cool-feature, а никак не this-is-a-cool.

Название патчей просто должны быть различимы, с их обзыванием прекрасно может справиться железяка

А уж рефреш на рандомный патч - это чистой воды выстрел в ногу.

Гм. Ты хочешь сказать, что никогда не делаешь qpop? Чушь же.

Я думаю, невозможность рефрешить не верхний патч была сделана специально, потому что реализация, понятное дело, тривиальна.

Я думаю, ртутисты просто любят стучать по кнопкам.

Ну да ладно, нет, так нет, запилю тогда сам (как всегда).

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

А в гите как это делается?

Ну так и делается. Сначала добавляю нужные файлы. Потом проверяю с помощью git diff --cached - смотрю изменения, принадлежащие именно этому набору файлов. Потом делаю коммит.
Вот средней части в mercurial как раз и нет, предлагается коммитить не проверяя, что уйдёт в репу.

anonymous ()
Ответ на: комментарий от baverman

Гм. Ты хочешь сказать, что никогда не делаешь qpop? Чушь же.

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

gaga ()
Ответ на: комментарий от xterro

hg status Что вывелось, то в репу и уйдёт

Да йопт же, мне не надо все изменения сразу коммитить!
Сказал же: сначала добавляю нужные файлы git add.

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

И «что уйдёт» - это именно изменения (diff), а не файлы. Файлы я и так знаю.

anonymous ()
Ответ на: комментарий от gaga

Расширением проверять, не руками, конечно.
Этим решается вопрос выстрела в ногу.

anonymous ()
Ответ на: комментарий от gaga

Если ты

сначала сделал qpop или qgoto, то дельта делается от правильного патча-предка.

Разве есть какой-то другой способ?

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

Разве есть какой-то другой способ?

Вроде нет, но ты же как раз хочешь его получить, насколько я понял.

На самом деле я не ахти какой спец по mq, мне хватает базовых функций ртути за глаза, mq пользуюсь изредка, в основном чтобы свернуть два коммита в один. Я понял тебя так:

Вот есть у нас очередь патчей: A - B - C - D - E - F

Допустим, на вершине у тебя сейчас B. Ты что-то меняешь и рефрешишь его, помещая туда дельту относительно патча А. Это гарантирует, что патч B ляжет без ошибок поверх А (но уже тут, если ты поменял строки, затронутые в C, с у тебя потом не наложится).

Ты же хочешь, находясь где-нибудь на D рефрешить в B. При этом туда войдет дельта рабочей копии относительно D. Это значит, что B уже может не наложиться на А (и скорей всего так оно и случится), а C и D могут не наложиться на B. Т.е. жопа в обе стороны.

Поэтому и надо так работать: рефрешишь один патч, после чего переключаешься на другой и рефрешишь его. При этом желательно чтобы строки не пересекались. Т.е. один патч - одна фича.

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

Ты же хочешь, находясь где-нибудь на D рефрешить в B.

Да.

При этом туда войдет дельта рабочей копии относительно D.

Нет. Она пересчитается для B.

Еще раз, ты пытаешься доказать, что *шоткат* для (qnew->qpop->qfold->qpush) будет нерабочим? Или что такой шоткат не нужен? Смею уверить, он и прекрасно работает, и нужен мне.

baverman ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.