t / t9119-git-svn-info.shon commit git-svn: info --url [path] (8b014d7)
   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 --url' '
  49        test $(cd gitwc; git-svn info --url) = $svnrepo
  50        '
  51
  52test_expect_success 'info .' "
  53        (cd svnwc; svn info .) > expected.info-dot &&
  54        (cd gitwc; git-svn info .) > actual.info-dot &&
  55        git-diff expected.info-dot actual.info-dot
  56        "
  57
  58test_expect_success 'info --url .' '
  59        test $(cd gitwc; git-svn info --url .) = $svnrepo
  60        '
  61
  62test_expect_success 'info file' "
  63        (cd svnwc; svn info file) > expected.info-file &&
  64        (cd gitwc; git-svn info file) > actual.info-file &&
  65        git-diff expected.info-file actual.info-file
  66        "
  67
  68test_expect_success 'info --url file' '
  69        test $(cd gitwc; git-svn info --url file) = "$svnrepo/file"
  70        '
  71
  72test_expect_success 'info directory' "
  73        (cd svnwc; svn info directory) > expected.info-directory &&
  74        (cd gitwc; git-svn info directory) > actual.info-directory &&
  75        git-diff expected.info-directory actual.info-directory
  76        "
  77
  78test_expect_success 'info --url directory' '
  79        test $(cd gitwc; git-svn info --url directory) = "$svnrepo/directory"
  80        '
  81
  82test_expect_success 'info symlink-file' "
  83        (cd svnwc; svn info symlink-file) > expected.info-symlink-file &&
  84        (cd gitwc; git-svn info symlink-file) > actual.info-symlink-file &&
  85        git-diff expected.info-symlink-file actual.info-symlink-file
  86        "
  87
  88test_expect_success 'info --url symlink-file' '
  89        test $(cd gitwc; git-svn info --url symlink-file) \
  90             = "$svnrepo/symlink-file"
  91        '
  92
  93test_expect_success 'info symlink-directory' "
  94        (cd svnwc; svn info symlink-directory) \
  95                > expected.info-symlink-directory &&
  96        (cd gitwc; git-svn info symlink-directory) \
  97                > actual.info-symlink-directory &&
  98        git-diff expected.info-symlink-directory actual.info-symlink-directory
  99        "
 100
 101test_expect_success 'info --url symlink-directory' '
 102        test $(cd gitwc; git-svn info --url symlink-directory) \
 103             = "$svnrepo/symlink-directory"
 104        '
 105
 106test_expect_success 'info added-file' "
 107        echo two > gitwc/added-file &&
 108        cd gitwc &&
 109                git add added-file &&
 110        cd .. &&
 111        cp gitwc/added-file svnwc/added-file &&
 112        ptouch gitwc/added-file svnwc/added-file &&
 113        cd svnwc &&
 114                svn add added-file > /dev/null &&
 115        cd .. &&
 116        (cd svnwc; svn info added-file) > expected.info-added-file &&
 117        (cd gitwc; git-svn info added-file) > actual.info-added-file &&
 118        git-diff expected.info-added-file actual.info-added-file
 119        "
 120
 121test_expect_success 'info --url added-file' '
 122        test $(cd gitwc; git-svn info --url added-file) \
 123             = "$svnrepo/added-file"
 124        '
 125
 126test_expect_success 'info added-directory' "
 127        mkdir gitwc/added-directory svnwc/added-directory &&
 128        ptouch gitwc/added-directory svnwc/added-directory &&
 129        touch gitwc/added-directory/.placeholder &&
 130        cd svnwc &&
 131                svn add added-directory > /dev/null &&
 132        cd .. &&
 133        cd gitwc &&
 134                git add added-directory &&
 135        cd .. &&
 136        (cd svnwc; svn info added-directory) \
 137                > expected.info-added-directory &&
 138        (cd gitwc; git-svn info added-directory) \
 139                > actual.info-added-directory &&
 140        git-diff expected.info-added-directory actual.info-added-directory
 141        "
 142
 143test_expect_success 'info --url added-directory' '
 144        test $(cd gitwc; git-svn info --url added-directory) \
 145             = "$svnrepo/added-directory"
 146        '
 147
 148test_expect_success 'info added-symlink-file' "
 149        cd gitwc &&
 150                ln -s added-file added-symlink-file &&
 151                git add added-symlink-file &&
 152        cd .. &&
 153        cd svnwc &&
 154                ln -s added-file added-symlink-file &&
 155                svn add added-symlink-file > /dev/null &&
 156        cd .. &&
 157        ptouch gitwc/added-symlink-file svnwc/added-symlink-file &&
 158        (cd svnwc; svn info added-symlink-file) \
 159                > expected.info-added-symlink-file &&
 160        (cd gitwc; git-svn info added-symlink-file) \
 161                > actual.info-added-symlink-file &&
 162        git-diff expected.info-added-symlink-file \
 163                 actual.info-added-symlink-file
 164        "
 165
 166test_expect_success 'info --url added-symlink-file' '
 167        test $(cd gitwc; git-svn info --url added-symlink-file) \
 168             = "$svnrepo/added-symlink-file"
 169        '
 170
 171test_expect_success 'info added-symlink-directory' "
 172        cd gitwc &&
 173                ln -s added-directory added-symlink-directory &&
 174                git add added-symlink-directory &&
 175        cd .. &&
 176        cd svnwc &&
 177                ln -s added-directory added-symlink-directory &&
 178                svn add added-symlink-directory > /dev/null &&
 179        cd .. &&
 180        ptouch gitwc/added-symlink-directory svnwc/added-symlink-directory &&
 181        (cd svnwc; svn info added-symlink-directory) \
 182                > expected.info-added-symlink-directory &&
 183        (cd gitwc; git-svn info added-symlink-directory) \
 184                > actual.info-added-symlink-directory &&
 185        git-diff expected.info-added-symlink-directory \
 186                 actual.info-added-symlink-directory
 187        "
 188
 189test_expect_success 'info --url added-symlink-directory' '
 190        test $(cd gitwc; git-svn info --url added-symlink-directory) \
 191             = "$svnrepo/added-symlink-directory"
 192        '
 193
 194# The next few tests replace the "Text Last Updated" value with a
 195# placeholder since git doesn't have a way to know the date that a
 196# now-deleted file was last checked out locally.  Internally it
 197# simply reuses the Last Changed Date.
 198
 199test_expect_success 'info deleted-file' "
 200        cd gitwc &&
 201                git rm -f file > /dev/null &&
 202        cd .. &&
 203        cd svnwc &&
 204                svn rm --force file > /dev/null &&
 205        cd .. &&
 206        (cd svnwc; svn info file) |
 207        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 208                > expected.info-deleted-file &&
 209        (cd gitwc; git-svn info file) |
 210        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 211                > actual.info-deleted-file &&
 212        git-diff expected.info-deleted-file actual.info-deleted-file
 213        "
 214
 215test_expect_success 'info --url file (deleted)' '
 216        test $(cd gitwc; git-svn info --url file) \
 217             = "$svnrepo/file"
 218        '
 219
 220test_expect_success 'info deleted-directory' "
 221        cd gitwc &&
 222                git rm -r -f directory > /dev/null &&
 223        cd .. &&
 224        cd svnwc &&
 225                svn rm --force directory > /dev/null &&
 226        cd .. &&
 227        (cd svnwc; svn info directory) |
 228        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 229                > expected.info-deleted-directory &&
 230        (cd gitwc; git-svn info directory) |
 231        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 232                > actual.info-deleted-directory &&
 233        git-diff expected.info-deleted-directory actual.info-deleted-directory
 234        "
 235
 236test_expect_success 'info --url directory (deleted)' '
 237        test $(cd gitwc; git-svn info --url directory) \
 238             = "$svnrepo/directory"
 239        '
 240
 241test_expect_success 'info deleted-symlink-file' "
 242        cd gitwc &&
 243                git rm -f symlink-file > /dev/null &&
 244        cd .. &&
 245        cd svnwc &&
 246                svn rm --force symlink-file > /dev/null &&
 247        cd .. &&
 248        (cd svnwc; svn info symlink-file) |
 249        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 250                > expected.info-deleted-symlink-file &&
 251        (cd gitwc; git-svn info symlink-file) |
 252        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 253                > actual.info-deleted-symlink-file &&
 254        git-diff expected.info-deleted-symlink-file \
 255                 actual.info-deleted-symlink-file
 256        "
 257
 258test_expect_success 'info --url symlink-file (deleted)' '
 259        test $(cd gitwc; git-svn info --url symlink-file) \
 260             = "$svnrepo/symlink-file"
 261        '
 262
 263test_expect_success 'info deleted-symlink-directory' "
 264        cd gitwc &&
 265                git rm -f symlink-directory > /dev/null &&
 266        cd .. &&
 267        cd svnwc &&
 268                svn rm --force symlink-directory > /dev/null &&
 269        cd .. &&
 270        (cd svnwc; svn info symlink-directory) |
 271        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 272                 > expected.info-deleted-symlink-directory &&
 273        (cd gitwc; git-svn info symlink-directory) |
 274        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 275                 > actual.info-deleted-symlink-directory &&
 276        git-diff expected.info-deleted-symlink-directory \
 277                 actual.info-deleted-symlink-directory
 278        "
 279
 280test_expect_success 'info --url symlink-directory (deleted)' '
 281        test $(cd gitwc; git-svn info --url symlink-directory) \
 282             = "$svnrepo/symlink-directory"
 283        '
 284
 285# NOTE: git does not have the concept of replaced objects,
 286# so we can't test for files in that state.
 287
 288test_expect_success 'info unknown-file' "
 289        echo two > gitwc/unknown-file &&
 290        cp gitwc/unknown-file svnwc/unknown-file &&
 291        ptouch gitwc/unknown-file svnwc/unknown-file &&
 292        (cd svnwc; svn info unknown-file) 2> expected.info-unknown-file &&
 293        (cd gitwc; git-svn info unknown-file) 2> actual.info-unknown-file &&
 294        git-diff expected.info-unknown-file actual.info-unknown-file
 295        "
 296
 297test_expect_success 'info --url unknown-file' '
 298        test -z $(cd gitwc; git-svn info --url unknown-file \
 299                        2> ../actual.info--url-unknown-file) &&
 300        git-diff expected.info-unknown-file actual.info--url-unknown-file
 301        '
 302
 303test_expect_success 'info unknown-directory' "
 304        mkdir gitwc/unknown-directory svnwc/unknown-directory &&
 305        ptouch gitwc/unknown-directory svnwc/unknown-directory &&
 306        touch gitwc/unknown-directory/.placeholder &&
 307        (cd svnwc; svn info unknown-directory) \
 308                2> expected.info-unknown-directory &&
 309        (cd gitwc; git-svn info unknown-directory) \
 310                2> actual.info-unknown-directory &&
 311        git-diff expected.info-unknown-directory actual.info-unknown-directory
 312        "
 313
 314test_expect_success 'info --url unknown-directory' '
 315        test -z $(cd gitwc; git-svn info --url unknown-directory \
 316                        2> ../actual.info--url-unknown-directory) &&
 317        git-diff expected.info-unknown-directory \
 318                 actual.info--url-unknown-directory
 319        '
 320
 321test_expect_success 'info unknown-symlink-file' "
 322        cd gitwc &&
 323                ln -s unknown-file unknown-symlink-file &&
 324        cd .. &&
 325        cd svnwc &&
 326                ln -s unknown-file unknown-symlink-file &&
 327        cd .. &&
 328        ptouch gitwc/unknown-symlink-file svnwc/unknown-symlink-file &&
 329        (cd svnwc; svn info unknown-symlink-file) \
 330                2> expected.info-unknown-symlink-file &&
 331        (cd gitwc; git-svn info unknown-symlink-file) \
 332                2> actual.info-unknown-symlink-file &&
 333        git-diff expected.info-unknown-symlink-file \
 334                 actual.info-unknown-symlink-file
 335        "
 336
 337test_expect_success 'info --url unknown-symlink-file' '
 338        test -z $(cd gitwc; git-svn info --url unknown-symlink-file \
 339                        2> ../actual.info--url-unknown-symlink-file) &&
 340        git-diff expected.info-unknown-symlink-file \
 341                 actual.info--url-unknown-symlink-file
 342        '
 343
 344test_expect_success 'info unknown-symlink-directory' "
 345        cd gitwc &&
 346                ln -s unknown-directory unknown-symlink-directory &&
 347        cd .. &&
 348        cd svnwc &&
 349                ln -s unknown-directory unknown-symlink-directory &&
 350        cd .. &&
 351        ptouch gitwc/unknown-symlink-directory \
 352               svnwc/unknown-symlink-directory &&
 353        (cd svnwc; svn info unknown-symlink-directory) \
 354                2> expected.info-unknown-symlink-directory &&
 355        (cd gitwc; git-svn info unknown-symlink-directory) \
 356                2> actual.info-unknown-symlink-directory &&
 357        git-diff expected.info-unknown-symlink-directory \
 358                 actual.info-unknown-symlink-directory
 359        "
 360
 361test_expect_success 'info --url unknown-symlink-directory' '
 362        test -z $(cd gitwc; git-svn info --url unknown-symlink-directory \
 363                        2> ../actual.info--url-unknown-symlink-directory) &&
 364        git-diff expected.info-unknown-symlink-directory \
 365                 actual.info--url-unknown-symlink-directory
 366        '
 367
 368test_done