вторник, 25 августа 2009 г.

Git#

Новость старая, но все же. Есть такой проект Git#.  Задачей его является создание версии git на C#. Не знаю, плохо это или хорошо. НО! Если у них все получится, то появится нормальная версия git для windows. Поскольку git# разрабатывается, как библиотка классов, то теперь для windows можно создавать оконный gui для git. Так же, может упроститься создание плагинов для различных ide.

воскресенье, 23 августа 2009 г.

Создание сообщения для blogger в emacs.

Как можно вести блог из Emacs? Полностью автоматического решения я так
и не нашел. Но подсмотрел на одном сайте хороший способ. Делается все
так:
Ставится пакет muse-mode. Это режим для emacs, позволяющий работать в wiki-подобном стиле.
Далее все просто. Набираем все в muse-mode. Экспортирем в html
командой muse-publish-this-file. Если нужно вставить кусок исходника, то
помечаем его, специальными тегами.

<src lang="lisp">
</src>

Код выглядит весьма прилично:

(defvar gitconfig-mode-font-lock-keywords
(list '("^\\[\\(.*\\)\\]$" 1 font-lock-function-name-face)
'("\\(.+\\)=\\([^\r\n]*\\)"
(1 font-lock-variable-name-face)
(2 font-lock-type-face)))
"Highlighting expressions for GitConfig mode.")
А далее все просто. Копируем получившийся html в блог. :)

Emacs и gitconfig

Сделал режим, для редактирования конфигов git.
Исходники брать тут.

суббота, 22 августа 2009 г.

Подсветка синтаксиса на blogspot.com

Здесь находится описание, как добавить подсветку синтакиса на блог.

emacs yasnippet

Попробовал режим yasnippet для emacs. Суть его в том, чтобы заменять введенный текст на заранее известные для текущего режима шаблоны. Удобно при наборе программы. Например: Вводим once в файл crossover.h при работе в режиме c-mode и брюки превра... вернее слово превращается в такой код.


#ifndef _CROSSOVER_H_
#define _CROSSOVER_H_



#endif /* _CROSSOVER_H_*/

Все шаблоны являются отдельными файлами и легко дополняются своими.

воскресенье, 16 августа 2009 г.

суббота, 1 августа 2009 г.

hg_squash

В дополнение к предыдущему посту. Вот простой скрипт, реализующий данную команду.
#!/bin/sh
# hg_squash

usage(){
echo  "usage: $0 rev MESSAGE"
}

if [ $# -lt 2 ]
then
usage
exit 1
fi


if [ $1 = "-h" ]
then
usage
exit 1
fi

rev=$1
tip=`hg tip --template  "{rev}"`
next=`expr $rev + 1`
new_log=`hg log -r $rev:$tip --template "{desc|firstline}\n"`
echo "Rev count: "$rev
echo "Tip revision: " $tip
echo "Message: " $2
echo "New commit message: " $new_log
echo "Update to $rev..."
hg update $rev
echo "Reverting..."
hg revert -r tip --all
echo "Commiting..."
new_message=`echo "$2""\\nCombine changesets $next..$tip\\n\\n$new_log"`
hg commit -m "$new_message"
echo "Strip..."
hg strip `expr $rev + 1`

Запускать, из директории с репозитарием. Первый параметр, номер ревизии, предшествующей объединяемым изменениям. Второй- описание изменения.

HG squash. Или как объеденить несколько изменений.

Часто, в репозитарий попадают изменения, которые делают исходный код не рабочим, но исправления будут сделаны в следующих ревизиях. А потом, может возникает желание, объединить их в один патч. Это можно сделать следующим образом.

hg update S

Обновляем до ревизии, предшествующей необходимым изменениям.

hg revert -r tip --all

Теперь отменяем все сделанные изменения.

hg commit -m "Combine changesets S+1..S+k"

И объединяем в один chageset.

Теперь возникает такая проблема, что в репозитарии образовалось две ветки, основная, и полученная после hg commit. Это решается двумя разными способами:

1) hg clone -r tip oldrepo newrepo - созданием нового репозитария
2) воспользоваться командой hg strip