Рефакторинг при реализации функции с помощью Mercurial

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

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

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

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

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

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

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

4 ответа

Решение

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

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

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

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

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

4 - qpop it

...

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

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

7a - объединить ветвь рефакторинга в Feature-ветку

7b - qpush в feature-branch, разрешать конфликты

7c - qfinish

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

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

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

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

Другие вопросы по тегам