LINUX.ORG.RU

[pygit2]how to commit


0

0

я вернулся :)

сейчас я питаюсь закоммитить измененный файл..

vv@crusader ~/work/own/python/config_tool/my_confman/configs $ gt status
# On branch tee
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   2
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .swp
#       3
no changes added to commit (use "git add" and/or "git commit -a")
vv@crusader ~/work/own/python/config_tool/my_confman/configs $ !p
python ../confman 
<type 'file'>   .swp
8
unexpected status
===
<type 'file'>   3
8
unexpected status
===
<type 'file'>   2
16
:)
.swp
8
--
3
8
--
2
2
--
÷ý*y²BZ8ѫ%|
<pygit2.Commit object at 0xb74ae120>
d54011f7fd2a7990c654b2425a38d1ab25c6717c
===
vv@crusader ~/work/own/python/config_tool/my_confman/configs $ gt status
# On branch tee
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   2
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .swp
#       3
vv@crusader ~/work/own/python/config_tool/my_confman/configs $ gt log -n 2
commit b01d1463ea2766dddecda1f13e8e12d83effe106
Author: vv <vv@crusader.terra.zu>
Date:   Sun Jan 1 13:58:41 2012 +0200

    test2

commit aa309cdf3330831d0f19de534921364991c54e7b
Author: vv <vv@crusader.terra.zu>
Date:   Sun Jan 1 13:56:24 2012 +0200

    test

vv@crusader ~/work/own/python/config_tool/my_confman/configs $

да, файл в staging добавляется. см внимательно статус после исполнения питонового скрипта.

код, который «делает» коммит

    message = "Update of '" + os.path.basename(filepath) + "', "
    message += "made at '" + socket.gethostname() + "' host"

    # TODO: get name, email from ...
    author = ('Jack Brown', '888@gmail.com', time.time(), time.altzone / 60)

    # Get the last commit
    head = repository.lookup_reference('HEAD')
    head = head.resolve()
    parent_commit = repository[head.oid]
    parents = [parent_commit.hex]

    # Get the tree object for last commit
    tree_prefix = parent_commit.tree.hex

    sha = repository.create_commit(None, author, author, message, tree_prefix, parents)
    print sha
    print repository[sha]
    print repository[sha].hex

что теперь я делаю не так? или по другому: какой ман теперь надо читать?

★★★★★

С pygit2 не работал, но есть мнение что ты.передаешь айди старого дерева вместо нового.

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

Коммит привязан к гитовому объекту tree + метаинфа о коммите. После изменения объектов у тебя будут новые деревья и блобы в гите. Ты же если мое зрение меня не подводит к новому коммиту лепишь старое дерево, поэтому у тебя и получается, что Коммит был, а изменегий нет. + не понятно почему у тебя кучу раз передается author.

Кажется типа такого должно быть: [code] oid = repository.index.write_tree() tree_prefix = b2a_hex(oid).decode('ascii') [/code] Вообще, смотри тесты, доки к сишной либе и почитай что из себя гит внутри предсавляет.

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

Про передачу несколько раз author я кончено наврал, с этим все нормально. Ну и референс надо подвинуть видимо, libgit2 этого сам не должен делать.

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