#!/usr/bin/env bash test_description='"notmuch git" to save and restore tags' . $(dirname "$0")/test-lib.sh || exit 1 add_git_repos () { # first the equivalent of "notmuch git init" (which doesn't exist yet) git init --bare --initial-branch=master --quiet remote.git git -C remote.git read-tree --empty tree=$(git -C remote.git write-tree) git -C remote.git hash-object -w /dev/null > /dev/null commit=$(echo 'root commit' | git -C remote.git commit-tree $tree) git -C remote.git update-ref refs/heads/master $commit # now make a "local" repo to work on git clone --bare --quiet remote.git tags.git git -C tags.git config --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" git -C tags.git fetch origin git -C tags.git branch -u origin/master master } add_email_corpus add_git_repos test_begin_subtest "clone" # currently broken because of hard-wired requirement for config branch test_subtest_known_broken test_expect_success "notmuch git -C clone.git clone tags.git" test_begin_subtest "commit" notmuch git -C tags.git -p '' commit git -C tags.git ls-tree -r --name-only HEAD | xargs dirname | sort -u | sed s,tags/,id:, > OUTPUT notmuch search --output=messages '*' | sort > EXPECTED test_expect_equal_file_nonempty EXPECTED OUTPUT test_begin_subtest "checkout" notmuch dump > BEFORE notmuch tag -inbox '*' notmuch git -C tags.git -p '' checkout notmuch dump > AFTER test_expect_equal_file_nonempty BEFORE AFTER test_begin_subtest "archive" notmuch git -C tags.git -p '' archive | tar tf - | \ grep 20091117190054.GU3165@dottiness.seas.harvard.edu | sort > OUTPUT cat < EXPECTED tags/20091117190054.GU3165@dottiness.seas.harvard.edu/ tags/20091117190054.GU3165@dottiness.seas.harvard.edu/inbox tags/20091117190054.GU3165@dottiness.seas.harvard.edu/signed tags/20091117190054.GU3165@dottiness.seas.harvard.edu/unread EOF notmuch git -C tags.git -p '' checkout test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "status" notmuch tag +test id:20091117190054.GU3165@dottiness.seas.harvard.edu notmuch git -C tags.git -p '' status > OUTPUT cat < EXPECTED A 20091117190054.GU3165@dottiness.seas.harvard.edu test EOF notmuch git -C tags.git -p '' checkout test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "fetch" notmuch tag +test2 id:20091117190054.GU3165@dottiness.seas.harvard.edu notmuch git -C remote.git -p '' commit notmuch tag -test2 id:20091117190054.GU3165@dottiness.seas.harvard.edu notmuch git -C tags.git -p '' fetch notmuch git -C tags.git -p '' status > OUTPUT cat < EXPECTED a 20091117190054.GU3165@dottiness.seas.harvard.edu test2 EOF notmuch git -C tags.git -p '' checkout test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "merge" notmuch git -C tags.git -p '' merge notmuch dump id:20091117190054.GU3165@dottiness.seas.harvard.edu | grep -v '^#' > OUTPUT cat < EXPECTED +inbox +signed +test2 +unread -- id:20091117190054.GU3165@dottiness.seas.harvard.edu EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "push" notmuch tag +test3 id:20091117190054.GU3165@dottiness.seas.harvard.edu notmuch git -C tags.git -p '' commit notmuch tag -test3 id:20091117190054.GU3165@dottiness.seas.harvard.edu notmuch git -C tags.git -p '' push notmuch git -C remote.git -p '' checkout notmuch dump id:20091117190054.GU3165@dottiness.seas.harvard.edu | grep -v '^#' > OUTPUT cat < EXPECTED +inbox +signed +test2 +test3 +unread -- id:20091117190054.GU3165@dottiness.seas.harvard.edu EOF test_expect_equal_file EXPECTED OUTPUT test_done