Рефакторинг при реализации функции с помощью Mercurial - PullRequest
1 голос
/ 01 марта 2012

Мне нужен совет по процессу разработки с Mercurial при работе с унаследованным кодом.

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

Поскольку я думаю, что рефакторинг полезендаже если функция не реализована, я хочу, чтобы она была сама по себе набором изменений, а не частью "набора изменений".Кроме того, поскольку я работаю с устаревшим кодом, он не является хорошо тестируемым модулем, поэтому мне нужно протестировать (вручную) только рефакторинг без кода разрабатываемой функции.

Итак, мой текущий процесс, когдаРабота старого кода выглядит следующим образом:

  1. работа над функцией
  2. упс, мне нужно что-то реорганизовать, поэтому
  3. извлекает патч из текущего состояниямоя рабочая копия
  4. отменить изменения
  5. выполнить рефакторинг и протестировать!
  6. зафиксировать изменение в репозитории Mercurial
  7. повторно импортировать патч и обработатьс конфликтами вручную
  8. вернуться к 1.

Есть ли что-то, что я мог бы улучшить в моем процессе с Mercurial?Есть ли способ временно сохранить рабочую копию и получить mercurial разрешение конфликтов, когда я возвращаю сохраненные изменения в мою рабочую копию?

Если нет, то git рассматривает этот вариант использования больше, чем mercurial?

Ответы [ 4 ]

2 голосов
/ 01 марта 2012

Расширение shelve выполняет шаги 3, 4 и 7 за вас.Подробности можно найти здесь .

Если вы используете TortoiseHg, он встроен в рабочую среду в меню репозитория.

2 голосов
/ 01 марта 2012

Мои небольшие отклонения

  • Я не представляю себе серьезного развития без MQ, поэтому

3 - сохранить текущую работу как MQ-патч

4 - qpop it

...

6 - зафиксировать в отдельной ветке

7 - qpush поверх рефакторинг ветки , разрешение конфликтов, qpop

7a - объединить ветвь рефакторинга с функциональной ветвью

7b - qpush в ветви функций, разрешение конфликтов

7c - qfinish

1 голос
/ 01 марта 2012

Вместо извлечения патча я бы зафиксировал код:

  1. Работа над функцией
  2. Узнайте, что вам нужно что-то реорганизовать
  3. Зафиксируйте свою работу в процессе
  4. Обновление до ревизии перед вашим коммитом
  5. Провести рефакторинг, тест
  6. Зафиксируйте измененный код
  7. Объединить с ранее совершенной незавершенной работой
  8. Продолжить, промыть, повторить

Бонусные баллы, если работа, которую вы выполняете на шаге 3, является функциональной :), потому что неработающий код является плохой отправной точкой для возобновления работы после рефакторинга.

0 голосов
/ 01 марта 2012

Когда я нахожусь в этой ситуации, я делаю все одним большим куском, и когда я готов к фиксации, я разделяю патч, используя qrecord или вручную (используя Emacs).

...