t / t9119-git-svn-info.shon commit git-svn info: implement info command (e6fefa9)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 David D. Kilzer
   4
   5test_description='git-svn info'
   6
   7. ./lib-git-svn.sh
   8
   9ptouch() {
  10        perl -w -e '
  11                use strict;
  12                die "ptouch requires exactly 2 arguments" if @ARGV != 2;
  13                die "$ARGV[0] does not exist" if ! -e $ARGV[0];
  14                my @s = stat $ARGV[0];
  15                utime $s[8], $s[9], $ARGV[1];
  16        ' "$1" "$2"
  17}
  18
  19test_expect_success 'setup repository and import' "
  20        mkdir info &&
  21        cd info &&
  22                echo FIRST > A &&
  23                echo one > file &&
  24                ln -s file symlink-file &&
  25                mkdir directory &&
  26                touch directory/.placeholder &&
  27                ln -s directory symlink-directory &&
  28                svn import -m 'initial' . $svnrepo &&
  29        cd .. &&
  30        mkdir gitwc &&
  31        cd gitwc &&
  32                git-svn init $svnrepo &&
  33                git-svn fetch &&
  34        cd .. &&
  35        svn co $svnrepo svnwc &&
  36        ptouch svnwc/file gitwc/file &&
  37        ptouch svnwc/directory gitwc/directory &&
  38        ptouch svnwc/symlink-file gitwc/symlink-file &&
  39        ptouch svnwc/symlink-directory gitwc/symlink-directory
  40        "
  41
  42test_expect_success 'info' "
  43        (cd svnwc; svn info) > expected.info &&
  44        (cd gitwc; git-svn info) > actual.info &&
  45        git-diff expected.info actual.info
  46        "
  47
  48test_expect_success 'info .' "
  49        (cd svnwc; svn info .) > expected.info-dot &&
  50        (cd gitwc; git-svn info .) > actual.info-dot &&
  51        git-diff expected.info-dot actual.info-dot
  52        "
  53
  54test_expect_success 'info file' "
  55        (cd svnwc; svn info file) > expected.info-file &&
  56        (cd gitwc; git-svn info file) > actual.info-file &&
  57        git-diff expected.info-file actual.info-file
  58        "
  59
  60test_expect_success 'info directory' "
  61        (cd svnwc; svn info directory) > expected.info-directory &&
  62        (cd gitwc; git-svn info directory) > actual.info-directory &&
  63        git-diff expected.info-directory actual.info-directory
  64        "
  65
  66test_expect_success 'info symlink-file' "
  67        (cd svnwc; svn info symlink-file) > expected.info-symlink-file &&
  68        (cd gitwc; git-svn info symlink-file) > actual.info-symlink-file &&
  69        git-diff expected.info-symlink-file actual.info-symlink-file
  70        "
  71
  72test_expect_success 'info symlink-directory' "
  73        (cd svnwc; svn info symlink-directory) \
  74                > expected.info-symlink-directory &&
  75        (cd gitwc; git-svn info symlink-directory) \
  76                > actual.info-symlink-directory &&
  77        git-diff expected.info-symlink-directory actual.info-symlink-directory
  78        "
  79
  80test_expect_success 'info added-file' "
  81        echo two > gitwc/added-file &&
  82        cd gitwc &&
  83                git add added-file &&
  84        cd .. &&
  85        cp gitwc/added-file svnwc/added-file &&
  86        ptouch gitwc/added-file svnwc/added-file &&
  87        cd svnwc &&
  88                svn add added-file > /dev/null &&
  89        cd .. &&
  90        (cd svnwc; svn info added-file) > expected.info-added-file &&
  91        (cd gitwc; git-svn info added-file) > actual.info-added-file &&
  92        git-diff expected.info-added-file actual.info-added-file
  93        "
  94
  95test_expect_success 'info added-directory' "
  96        mkdir gitwc/added-directory svnwc/added-directory &&
  97        ptouch gitwc/added-directory svnwc/added-directory &&
  98        touch gitwc/added-directory/.placeholder &&
  99        cd svnwc &&
 100                svn add added-directory > /dev/null &&
 101        cd .. &&
 102        cd gitwc &&
 103                git add added-directory &&
 104        cd .. &&
 105        (cd svnwc; svn info added-directory) \
 106                > expected.info-added-directory &&
 107        (cd gitwc; git-svn info added-directory) \
 108                > actual.info-added-directory &&
 109        git-diff expected.info-added-directory actual.info-added-directory
 110        "
 111
 112test_expect_success 'info added-symlink-file' "
 113        cd gitwc &&
 114                ln -s added-file added-symlink-file &&
 115                git add added-symlink-file &&
 116        cd .. &&
 117        cd svnwc &&
 118                ln -s added-file added-symlink-file &&
 119                svn add added-symlink-file > /dev/null &&
 120        cd .. &&
 121        ptouch gitwc/added-symlink-file svnwc/added-symlink-file &&
 122        (cd svnwc; svn info added-symlink-file) \
 123                > expected.info-added-symlink-file &&
 124        (cd gitwc; git-svn info added-symlink-file) \
 125                > actual.info-added-symlink-file &&
 126        git-diff expected.info-added-symlink-file \
 127                 actual.info-added-symlink-file
 128        "
 129
 130test_expect_success 'info added-symlink-directory' "
 131        cd gitwc &&
 132                ln -s added-directory added-symlink-directory &&
 133                git add added-symlink-directory &&
 134        cd .. &&
 135        cd svnwc &&
 136                ln -s added-directory added-symlink-directory &&
 137                svn add added-symlink-directory > /dev/null &&
 138        cd .. &&
 139        ptouch gitwc/added-symlink-directory svnwc/added-symlink-directory &&
 140        (cd svnwc; svn info added-symlink-directory) \
 141                > expected.info-added-symlink-directory &&
 142        (cd gitwc; git-svn info added-symlink-directory) \
 143                > actual.info-added-symlink-directory &&
 144        git-diff expected.info-added-symlink-directory \
 145                 actual.info-added-symlink-directory
 146        "
 147
 148# The next few tests replace the "Text Last Updated" value with a
 149# placeholder since git doesn't have a way to know the date that a
 150# now-deleted file was last checked out locally.  Internally it
 151# simply reuses the Last Changed Date.
 152
 153test_expect_success 'info deleted-file' "
 154        cd gitwc &&
 155                git rm -f file > /dev/null &&
 156        cd .. &&
 157        cd svnwc &&
 158                svn rm --force file > /dev/null &&
 159        cd .. &&
 160        (cd svnwc; svn info file) |
 161        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 162                > expected.info-deleted-file &&
 163        (cd gitwc; git-svn info file) |
 164        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 165                > actual.info-deleted-file &&
 166        git-diff expected.info-deleted-file actual.info-deleted-file
 167        "
 168
 169test_expect_success 'info deleted-directory' "
 170        cd gitwc &&
 171                git rm -r -f directory > /dev/null &&
 172        cd .. &&
 173        cd svnwc &&
 174                svn rm --force directory > /dev/null &&
 175        cd .. &&
 176        (cd svnwc; svn info directory) |
 177        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 178                > expected.info-deleted-directory &&
 179        (cd gitwc; git-svn info directory) |
 180        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 181                > actual.info-deleted-directory &&
 182        git-diff expected.info-deleted-directory actual.info-deleted-directory
 183        "
 184
 185test_expect_success 'info deleted-symlink-file' "
 186        cd gitwc &&
 187                git rm -f symlink-file > /dev/null &&
 188        cd .. &&
 189        cd svnwc &&
 190                svn rm --force symlink-file > /dev/null &&
 191        cd .. &&
 192        (cd svnwc; svn info symlink-file) |
 193        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 194                > expected.info-deleted-symlink-file &&
 195        (cd gitwc; git-svn info symlink-file) |
 196        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 197                > actual.info-deleted-symlink-file &&
 198        git-diff expected.info-deleted-symlink-file \
 199                 actual.info-deleted-symlink-file
 200        "
 201
 202test_expect_success 'info deleted-symlink-directory' "
 203        cd gitwc &&
 204                git rm -f symlink-directory > /dev/null &&
 205        cd .. &&
 206        cd svnwc &&
 207                svn rm --force symlink-directory > /dev/null &&
 208        cd .. &&
 209        (cd svnwc; svn info symlink-directory) |
 210        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 211                 > expected.info-deleted-symlink-directory &&
 212        (cd gitwc; git-svn info symlink-directory) |
 213        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 214                 > actual.info-deleted-symlink-directory &&
 215        git-diff expected.info-deleted-symlink-directory \
 216                 actual.info-deleted-symlink-directory
 217        "
 218
 219# NOTE: git does not have the concept of replaced objects,
 220# so we can't test for files in that state.
 221
 222test_expect_success 'info unknown-file' "
 223        echo two > gitwc/unknown-file &&
 224        cp gitwc/unknown-file svnwc/unknown-file &&
 225        ptouch gitwc/unknown-file svnwc/unknown-file &&
 226        (cd svnwc; svn info unknown-file) 2> expected.info-unknown-file &&
 227        (cd gitwc; git-svn info unknown-file) 2> actual.info-unknown-file &&
 228        git-diff expected.info-unknown-file actual.info-unknown-file
 229        "
 230
 231test_expect_success 'info unknown-directory' "
 232        mkdir gitwc/unknown-directory svnwc/unknown-directory &&
 233        ptouch gitwc/unknown-directory svnwc/unknown-directory &&
 234        touch gitwc/unknown-directory/.placeholder &&
 235        (cd svnwc; svn info unknown-directory) \
 236                2> expected.info-unknown-directory &&
 237        (cd gitwc; git-svn info unknown-directory) \
 238                2> actual.info-unknown-directory &&
 239        git-diff expected.info-unknown-directory actual.info-unknown-directory
 240        "
 241
 242test_expect_success 'info unknown-symlink-file' "
 243        cd gitwc &&
 244                ln -s unknown-file unknown-symlink-file &&
 245        cd .. &&
 246        cd svnwc &&
 247                ln -s unknown-file unknown-symlink-file &&
 248        cd .. &&
 249        ptouch gitwc/unknown-symlink-file svnwc/unknown-symlink-file &&
 250        (cd svnwc; svn info unknown-symlink-file) \
 251                2> expected.info-unknown-symlink-file &&
 252        (cd gitwc; git-svn info unknown-symlink-file) \
 253                2> actual.info-unknown-symlink-file &&
 254        git-diff expected.info-unknown-symlink-file \
 255                 actual.info-unknown-symlink-file
 256        "
 257
 258test_expect_success 'info unknown-symlink-directory' "
 259        cd gitwc &&
 260                ln -s unknown-directory unknown-symlink-directory &&
 261        cd .. &&
 262        cd svnwc &&
 263                ln -s unknown-directory unknown-symlink-directory &&
 264        cd .. &&
 265        ptouch gitwc/unknown-symlink-directory \
 266               svnwc/unknown-symlink-directory &&
 267        (cd svnwc; svn info unknown-symlink-directory) \
 268                2> expected.info-unknown-symlink-directory &&
 269        (cd gitwc; git-svn info unknown-symlink-directory) \
 270                2> actual.info-unknown-symlink-directory &&
 271        git-diff expected.info-unknown-symlink-directory \
 272                 actual.info-unknown-symlink-directory
 273        "
 274
 275test_done