достатьньо проектів які ведуться в цій CVS і за розвитком яких я стежу.
Якщо для subversion є настільний клієнт Tortoise SVN , який покриває
мої потреби на 100%, то для mercurial прийнятного GUI-клієнта поки
немає. Аналог Tortoise SVN, Tortoise Hg має один неприємний дефект, він
конфліктує з встановленим Wing IDE, тому я від Tortoise Hg відмовився.
Незручність для мене консольного клієнта в тому що мені треба зайти в
кожну папку проекту і там маю виконати команду hg update. Цю задачу
було автоматизовано невеликим скриптом для iPython(інтерактивна консоль длоя Python). Зауважу що я використовую iPython
в режиму роботи командної оболонки , для цього він запускається з
опціями ipython -p sh . Всі дії проводилися на Windows XP проте повинно
працювати без змін і на будь-якому xUnix/Linux де можна встановити
Python та mercurial.
Всі проекти які я відстежую в мене зберігаються наступним чином:
some_drive\repository\svn\proj1 proj2 proj3 \hg\hg_proj1 hg_proj2 hg_proj3
Для рекурсивного оновлення проектів в підпапках я написав такий скрипт:
dirs = %mglob dir:*
for d in dirs:
cd $d
pwd
!hg pull
!hg update
up()
Розберемо по черзі що відбувається:
dirs = %mglob dir:*
в змінну dirs поміщається результат роботи вбудованої магічної команди (тут режим автопідстановки не здатен правильно розібратися, тому '%' писати обов'язково). mglob повертає список які підходять під заданий фільтр, а саме всі підпапки в поточній папці.for d in dirs:
- цикл для перебору списку папок, змінній d під час кожної ітерації присвоюватиметься наступний елемент списку dirscd $d
- команда зміни поточної папки на папку вказану в змінній d. Зверніть увагу на знак '$', він дає вказівку інтерпритатору передати командному інтерпритатору вже результат виконаної команди чи змінну, в даному випадку назви підпапок.- pwd - ще одна вбудована магічна команда, повертає поточну папку в
якій ми знаходимся. - !hg pull - для отримання змін з головного репозитарію(отримання змінн ззовні), зауважте на знак '!' він означає що викликається зовнішня команда.
- !hg update - оновлення локальної копії, тобто злиття змін отриманих на попередньому кроці з вашою копією.
up()
- функція еквівалентна cd .. - повернення на рівень вище, в даному випадку дужки () обов'язкові.
!hg update
та повернеться на рівень вверх.Збережемо як макрос цей код, для наступних використань, для цього виконаємо наступну команду: %macro hgrecupdate 150-151 , де hgrecupdate назва макроса, 150-151 - номери рядків в яких введено код макроса.
Щоб протестувати його роботу виконаємо наступні команди.
cd E:\repository\hg\ - команда зміни поточної директорії (треба зауважити, що системну команду !cd використовувати не рекомендовано, тому тут в реальності викликаєтьсся вбудована магічна команда(magic command) %cd, але оскільки по замовчуванню ввімкнуто режим автопідстановки, то знак '%' писати необов'язково).
hgrecupdate - власне виклик макроса рекурсивного оновлення.
Зразок виконання макроса зображено нижче:
--------------------> hgrecupdate() <12> 'e:\\repository\\hg\\byteflow' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\colubrid-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\jinja-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\lodgeit-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\pocoo-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\pygments-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\pylons' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\QuickWiki' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\textpress-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved <12> 'e:\\repository\\hg\\werkzeug-main' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
Проте, закінчивши роботу інтерпритатора ми виявимо, що макроси не зберігаються між сесіями. Тому для цього викличемо%store hgrecupdate
макрос буде збережено в постійній пам'яті і його можна буде викликати в наступних сесіях.
Розв'язуючи реальну задачу я показав тільки деякі прості методики роботи з інтерактивним інтерпритатором iPython в режимі командної оболонки. Проте для складніших задач вам прийдеться зануритися в документацію.