t / t9146-git-svn-empty-dirs.shon commit revision: implement sparse algorithm (d5d2e93)
   1#!/bin/sh
   2#
   3# Copyright (c) 2009 Eric Wong
   4
   5test_description='git svn creates empty directories'
   6. ./lib-git-svn.sh
   7
   8test_expect_success 'initialize repo' '
   9        for i in a b c d d/e d/e/f "weird file name"
  10        do
  11                svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
  12        done
  13'
  14
  15test_expect_success 'clone' 'git svn clone "$svnrepo" cloned'
  16
  17test_expect_success 'empty directories exist' '
  18        (
  19                cd cloned &&
  20                for i in a b c d d/e d/e/f "weird file name"
  21                do
  22                        if ! test -d "$i"
  23                        then
  24                                echo >&2 "$i does not exist" &&
  25                                exit 1
  26                        fi
  27                done
  28        )
  29'
  30
  31test_expect_success 'option automkdirs set to false' '
  32        (
  33                git svn init "$svnrepo" cloned-no-mkdirs &&
  34                cd cloned-no-mkdirs &&
  35                git config svn-remote.svn.automkdirs false &&
  36                git svn fetch &&
  37                for i in a b c d d/e d/e/f "weird file name"
  38                do
  39                        if test -d "$i"
  40                        then
  41                                echo >&2 "$i exists" &&
  42                                exit 1
  43                        fi
  44                done
  45        )
  46'
  47
  48test_expect_success 'more emptiness' '
  49        svn_cmd mkdir -m "bang bang"  "$svnrepo"/"! !"
  50'
  51
  52test_expect_success 'git svn rebase creates empty directory' '
  53        ( cd cloned && git svn rebase ) &&
  54        test -d cloned/"! !"
  55'
  56
  57test_expect_success 'git svn mkdirs recreates empty directories' '
  58        (
  59                cd cloned &&
  60                rm -r * &&
  61                git svn mkdirs &&
  62                for i in a b c d d/e d/e/f "weird file name" "! !"
  63                do
  64                        if ! test -d "$i"
  65                        then
  66                                echo >&2 "$i does not exist" &&
  67                                exit 1
  68                        fi
  69                done
  70        )
  71'
  72
  73test_expect_success 'git svn mkdirs -r works' '
  74        (
  75                cd cloned &&
  76                rm -r * &&
  77                git svn mkdirs -r7 &&
  78                for i in a b c d d/e d/e/f "weird file name"
  79                do
  80                        if ! test -d "$i"
  81                        then
  82                                echo >&2 "$i does not exist" &&
  83                                exit 1
  84                        fi
  85                done &&
  86
  87                if test -d "! !"
  88                then
  89                        echo >&2 "$i should not exist" &&
  90                        exit 1
  91                fi &&
  92
  93                git svn mkdirs -r8 &&
  94                if ! test -d "! !"
  95                then
  96                        echo >&2 "$i not exist" &&
  97                        exit 1
  98                fi
  99        )
 100'
 101
 102test_expect_success 'initialize trunk' '
 103        for i in trunk trunk/a trunk/"weird file name"
 104        do
 105                svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
 106        done
 107'
 108
 109test_expect_success 'clone trunk' 'git svn clone -s "$svnrepo" trunk'
 110
 111test_expect_success 'empty directories in trunk exist' '
 112        (
 113                cd trunk &&
 114                for i in a "weird file name"
 115                do
 116                        if ! test -d "$i"
 117                        then
 118                                echo >&2 "$i does not exist" &&
 119                                exit 1
 120                        fi
 121                done
 122        )
 123'
 124
 125test_expect_success 'remove a top-level directory from svn' '
 126        svn_cmd rm -m "remove d" "$svnrepo"/d
 127'
 128
 129test_expect_success 'removed top-level directory does not exist' '
 130        git svn clone "$svnrepo" removed &&
 131        test ! -e removed/d
 132
 133'
 134unhandled=.git/svn/refs/remotes/git-svn/unhandled.log
 135test_expect_success 'git svn gc-ed files work' '
 136        (
 137                cd removed &&
 138                git svn gc &&
 139                : Compress::Zlib may not be available &&
 140                if test -f "$unhandled".gz
 141                then
 142                        svn_cmd mkdir -m gz "$svnrepo"/gz &&
 143                        git reset --hard $(git rev-list HEAD | tail -1) &&
 144                        git svn rebase &&
 145                        test -f "$unhandled".gz &&
 146                        test -f "$unhandled" &&
 147                        for i in a b c "weird file name" gz "! !"
 148                        do
 149                                if ! test -d "$i"
 150                                then
 151                                        echo >&2 "$i does not exist" &&
 152                                        exit 1
 153                                fi
 154                        done
 155                fi
 156        )
 157'
 158
 159test_done