8709bcc49cfbc90579bd823d6dff7f050ce5d39f
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 David D. Kilzer
   4
   5test_description='git-svn info'
   6
   7. ./lib-git-svn.sh
   8
   9# Tested with: svn, version 1.4.4 (r25188)
  10v=`svn --version | sed -n -e 's/^svn, version \(1\.[0-9]*\.[0-9]*\).*$/\1/p'`
  11case $v in
  121.[45].*)
  13        ;;
  14*)
  15        say "skipping svn-info test (SVN version: $v not supported)"
  16        test_done
  17        ;;
  18esac
  19
  20ptouch() {
  21        perl -w -e '
  22                use strict;
  23                use POSIX qw(mktime);
  24                die "ptouch requires exactly 2 arguments" if @ARGV != 2;
  25                my $text_last_updated = shift @ARGV;
  26                my $git_file = shift @ARGV;
  27                die "\"$git_file\" does not exist" if ! -e $git_file;
  28                if ($text_last_updated
  29                    =~ /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/) {
  30                        my $mtime = mktime($6, $5, $4, $3, $2 - 1, $1 - 1900);
  31                        my $atime = $mtime;
  32                        utime $atime, $mtime, $git_file;
  33                }
  34        ' "`svn info $2 | grep '^Text Last Updated:'`" "$1"
  35}
  36
  37test_expect_success 'setup repository and import' '
  38        mkdir info &&
  39        cd info &&
  40                echo FIRST > A &&
  41                echo one > file &&
  42                ln -s file symlink-file &&
  43                mkdir directory &&
  44                touch directory/.placeholder &&
  45                ln -s directory symlink-directory &&
  46                svn import -m "initial" . "$svnrepo" &&
  47        cd .. &&
  48        svn co "$svnrepo" svnwc &&
  49        cd svnwc &&
  50                echo foo > foo &&
  51                svn add foo &&
  52                svn commit -m "change outside directory" &&
  53                svn update &&
  54        cd .. &&
  55        mkdir gitwc &&
  56        cd gitwc &&
  57                git-svn init "$svnrepo" &&
  58                git-svn fetch &&
  59        cd .. &&
  60        ptouch gitwc/file svnwc/file &&
  61        ptouch gitwc/directory svnwc/directory &&
  62        ptouch gitwc/symlink-file svnwc/symlink-file &&
  63        ptouch gitwc/symlink-directory svnwc/symlink-directory
  64        '
  65
  66test_expect_success 'info' "
  67        (cd svnwc; svn info) > expected.info &&
  68        (cd gitwc; git-svn info) > actual.info &&
  69        test_cmp expected.info actual.info
  70        "
  71
  72test_expect_success 'info --url' '
  73        test "$(cd gitwc; git-svn info --url)" = "$svnrepo"
  74        '
  75
  76test_expect_success 'info .' "
  77        (cd svnwc; svn info .) > expected.info-dot &&
  78        (cd gitwc; git-svn info .) > actual.info-dot &&
  79        test_cmp expected.info-dot actual.info-dot
  80        "
  81
  82test_expect_success 'info --url .' '
  83        test "$(cd gitwc; git-svn info --url .)" = "$svnrepo"
  84        '
  85
  86test_expect_success 'info file' "
  87        (cd svnwc; svn info file) > expected.info-file &&
  88        (cd gitwc; git-svn info file) > actual.info-file &&
  89        test_cmp expected.info-file actual.info-file
  90        "
  91
  92test_expect_success 'info --url file' '
  93        test "$(cd gitwc; git-svn info --url file)" = "$svnrepo/file"
  94        '
  95
  96test_expect_success 'info directory' "
  97        (cd svnwc; svn info directory) > expected.info-directory &&
  98        (cd gitwc; git-svn info directory) > actual.info-directory &&
  99        test_cmp expected.info-directory actual.info-directory
 100        "
 101
 102test_expect_success 'info inside directory' "
 103        (cd svnwc/directory; svn info) > expected.info-inside-directory &&
 104        (cd gitwc/directory; git-svn info) > actual.info-inside-directory &&
 105        test_cmp expected.info-inside-directory actual.info-inside-directory
 106        "
 107
 108test_expect_success 'info --url directory' '
 109        test "$(cd gitwc; git-svn info --url directory)" = "$svnrepo/directory"
 110        '
 111
 112test_expect_success 'info symlink-file' "
 113        (cd svnwc; svn info symlink-file) > expected.info-symlink-file &&
 114        (cd gitwc; git-svn info symlink-file) > actual.info-symlink-file &&
 115        test_cmp expected.info-symlink-file actual.info-symlink-file
 116        "
 117
 118test_expect_success 'info --url symlink-file' '
 119        test "$(cd gitwc; git-svn info --url symlink-file)" \
 120             = "$svnrepo/symlink-file"
 121        '
 122
 123test_expect_success 'info symlink-directory' "
 124        (cd svnwc; svn info symlink-directory) \
 125                > expected.info-symlink-directory &&
 126        (cd gitwc; git-svn info symlink-directory) \
 127                > actual.info-symlink-directory &&
 128        test_cmp expected.info-symlink-directory actual.info-symlink-directory
 129        "
 130
 131test_expect_success 'info --url symlink-directory' '
 132        test "$(cd gitwc; git-svn info --url symlink-directory)" \
 133             = "$svnrepo/symlink-directory"
 134        '
 135
 136test_expect_success 'info added-file' "
 137        echo two > gitwc/added-file &&
 138        cd gitwc &&
 139                git add added-file &&
 140        cd .. &&
 141        cp gitwc/added-file svnwc/added-file &&
 142        ptouch gitwc/added-file svnwc/added-file &&
 143        cd svnwc &&
 144                svn add added-file > /dev/null &&
 145        cd .. &&
 146        (cd svnwc; svn info added-file) > expected.info-added-file &&
 147        (cd gitwc; git-svn info added-file) > actual.info-added-file &&
 148        test_cmp expected.info-added-file actual.info-added-file
 149        "
 150
 151test_expect_success 'info --url added-file' '
 152        test "$(cd gitwc; git-svn info --url added-file)" \
 153             = "$svnrepo/added-file"
 154        '
 155
 156test_expect_success 'info added-directory' "
 157        mkdir gitwc/added-directory svnwc/added-directory &&
 158        ptouch gitwc/added-directory svnwc/added-directory &&
 159        touch gitwc/added-directory/.placeholder &&
 160        cd svnwc &&
 161                svn add added-directory > /dev/null &&
 162        cd .. &&
 163        cd gitwc &&
 164                git add added-directory &&
 165        cd .. &&
 166        (cd svnwc; svn info added-directory) \
 167                > expected.info-added-directory &&
 168        (cd gitwc; git-svn info added-directory) \
 169                > actual.info-added-directory &&
 170        test_cmp expected.info-added-directory actual.info-added-directory
 171        "
 172
 173test_expect_success 'info --url added-directory' '
 174        test "$(cd gitwc; git-svn info --url added-directory)" \
 175             = "$svnrepo/added-directory"
 176        '
 177
 178test_expect_success 'info added-symlink-file' "
 179        cd gitwc &&
 180                ln -s added-file added-symlink-file &&
 181                git add added-symlink-file &&
 182        cd .. &&
 183        cd svnwc &&
 184                ln -s added-file added-symlink-file &&
 185                svn add added-symlink-file > /dev/null &&
 186        cd .. &&
 187        ptouch gitwc/added-symlink-file svnwc/added-symlink-file &&
 188        (cd svnwc; svn info added-symlink-file) \
 189                > expected.info-added-symlink-file &&
 190        (cd gitwc; git-svn info added-symlink-file) \
 191                > actual.info-added-symlink-file &&
 192        test_cmp expected.info-added-symlink-file \
 193                 actual.info-added-symlink-file
 194        "
 195
 196test_expect_success 'info --url added-symlink-file' '
 197        test "$(cd gitwc; git-svn info --url added-symlink-file)" \
 198             = "$svnrepo/added-symlink-file"
 199        '
 200
 201test_expect_success 'info added-symlink-directory' "
 202        cd gitwc &&
 203                ln -s added-directory added-symlink-directory &&
 204                git add added-symlink-directory &&
 205        cd .. &&
 206        cd svnwc &&
 207                ln -s added-directory added-symlink-directory &&
 208                svn add added-symlink-directory > /dev/null &&
 209        cd .. &&
 210        ptouch gitwc/added-symlink-directory svnwc/added-symlink-directory &&
 211        (cd svnwc; svn info added-symlink-directory) \
 212                > expected.info-added-symlink-directory &&
 213        (cd gitwc; git-svn info added-symlink-directory) \
 214                > actual.info-added-symlink-directory &&
 215        test_cmp expected.info-added-symlink-directory \
 216                 actual.info-added-symlink-directory
 217        "
 218
 219test_expect_success 'info --url added-symlink-directory' '
 220        test "$(cd gitwc; git-svn info --url added-symlink-directory)" \
 221             = "$svnrepo/added-symlink-directory"
 222        '
 223
 224# The next few tests replace the "Text Last Updated" value with a
 225# placeholder since git doesn't have a way to know the date that a
 226# now-deleted file was last checked out locally.  Internally it
 227# simply reuses the Last Changed Date.
 228
 229test_expect_success 'info deleted-file' "
 230        cd gitwc &&
 231                git rm -f file > /dev/null &&
 232        cd .. &&
 233        cd svnwc &&
 234                svn rm --force file > /dev/null &&
 235        cd .. &&
 236        (cd svnwc; svn info file) |
 237        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 238                > expected.info-deleted-file &&
 239        (cd gitwc; git-svn info file) |
 240        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 241                > actual.info-deleted-file &&
 242        test_cmp expected.info-deleted-file actual.info-deleted-file
 243        "
 244
 245test_expect_success 'info --url file (deleted)' '
 246        test "$(cd gitwc; git-svn info --url file)" \
 247             = "$svnrepo/file"
 248        '
 249
 250test_expect_success 'info deleted-directory' "
 251        cd gitwc &&
 252                git rm -r -f directory > /dev/null &&
 253        cd .. &&
 254        cd svnwc &&
 255                svn rm --force directory > /dev/null &&
 256        cd .. &&
 257        (cd svnwc; svn info directory) |
 258        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 259                > expected.info-deleted-directory &&
 260        (cd gitwc; git-svn info directory) |
 261        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 262                > actual.info-deleted-directory &&
 263        test_cmp expected.info-deleted-directory actual.info-deleted-directory
 264        "
 265
 266test_expect_success 'info --url directory (deleted)' '
 267        test "$(cd gitwc; git-svn info --url directory)" \
 268             = "$svnrepo/directory"
 269        '
 270
 271test_expect_success 'info deleted-symlink-file' "
 272        cd gitwc &&
 273                git rm -f symlink-file > /dev/null &&
 274        cd .. &&
 275        cd svnwc &&
 276                svn rm --force symlink-file > /dev/null &&
 277        cd .. &&
 278        (cd svnwc; svn info symlink-file) |
 279        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 280                > expected.info-deleted-symlink-file &&
 281        (cd gitwc; git-svn info symlink-file) |
 282        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 283                > actual.info-deleted-symlink-file &&
 284        test_cmp expected.info-deleted-symlink-file \
 285                 actual.info-deleted-symlink-file
 286        "
 287
 288test_expect_success 'info --url symlink-file (deleted)' '
 289        test "$(cd gitwc; git-svn info --url symlink-file)" \
 290             = "$svnrepo/symlink-file"
 291        '
 292
 293test_expect_success 'info deleted-symlink-directory' "
 294        cd gitwc &&
 295                git rm -f symlink-directory > /dev/null &&
 296        cd .. &&
 297        cd svnwc &&
 298                svn rm --force symlink-directory > /dev/null &&
 299        cd .. &&
 300        (cd svnwc; svn info symlink-directory) |
 301        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 302                 > expected.info-deleted-symlink-directory &&
 303        (cd gitwc; git-svn info symlink-directory) |
 304        sed -e 's/^\(Text Last Updated:\).*/\1 TEXT-LAST-UPDATED-STRING/' \
 305                 > actual.info-deleted-symlink-directory &&
 306        test_cmp expected.info-deleted-symlink-directory \
 307                 actual.info-deleted-symlink-directory
 308        "
 309
 310test_expect_success 'info --url symlink-directory (deleted)' '
 311        test "$(cd gitwc; git-svn info --url symlink-directory)" \
 312             = "$svnrepo/symlink-directory"
 313        '
 314
 315# NOTE: git does not have the concept of replaced objects,
 316# so we can't test for files in that state.
 317
 318test_expect_success 'info unknown-file' "
 319        echo two > gitwc/unknown-file &&
 320        cp gitwc/unknown-file svnwc/unknown-file &&
 321        ptouch gitwc/unknown-file svnwc/unknown-file &&
 322        (cd svnwc; svn info unknown-file) 2> expected.info-unknown-file &&
 323        (cd gitwc; git-svn info unknown-file) 2> actual.info-unknown-file &&
 324        test_cmp expected.info-unknown-file actual.info-unknown-file
 325        "
 326
 327test_expect_success 'info --url unknown-file' '
 328        test -z "$(cd gitwc; git-svn info --url unknown-file \
 329                        2> ../actual.info--url-unknown-file)" &&
 330        test_cmp expected.info-unknown-file actual.info--url-unknown-file
 331        '
 332
 333test_expect_success 'info unknown-directory' "
 334        mkdir gitwc/unknown-directory svnwc/unknown-directory &&
 335        ptouch gitwc/unknown-directory svnwc/unknown-directory &&
 336        touch gitwc/unknown-directory/.placeholder &&
 337        (cd svnwc; svn info unknown-directory) \
 338                2> expected.info-unknown-directory &&
 339        (cd gitwc; git-svn info unknown-directory) \
 340                2> actual.info-unknown-directory &&
 341        test_cmp expected.info-unknown-directory actual.info-unknown-directory
 342        "
 343
 344test_expect_success 'info --url unknown-directory' '
 345        test -z "$(cd gitwc; git-svn info --url unknown-directory \
 346                        2> ../actual.info--url-unknown-directory)" &&
 347        test_cmp expected.info-unknown-directory \
 348                 actual.info--url-unknown-directory
 349        '
 350
 351test_expect_success 'info unknown-symlink-file' "
 352        cd gitwc &&
 353                ln -s unknown-file unknown-symlink-file &&
 354        cd .. &&
 355        cd svnwc &&
 356                ln -s unknown-file unknown-symlink-file &&
 357        cd .. &&
 358        ptouch gitwc/unknown-symlink-file svnwc/unknown-symlink-file &&
 359        (cd svnwc; svn info unknown-symlink-file) \
 360                2> expected.info-unknown-symlink-file &&
 361        (cd gitwc; git-svn info unknown-symlink-file) \
 362                2> actual.info-unknown-symlink-file &&
 363        test_cmp expected.info-unknown-symlink-file \
 364                 actual.info-unknown-symlink-file
 365        "
 366
 367test_expect_success 'info --url unknown-symlink-file' '
 368        test -z "$(cd gitwc; git-svn info --url unknown-symlink-file \
 369                        2> ../actual.info--url-unknown-symlink-file)" &&
 370        test_cmp expected.info-unknown-symlink-file \
 371                 actual.info--url-unknown-symlink-file
 372        '
 373
 374test_expect_success 'info unknown-symlink-directory' "
 375        cd gitwc &&
 376                ln -s unknown-directory unknown-symlink-directory &&
 377        cd .. &&
 378        cd svnwc &&
 379                ln -s unknown-directory unknown-symlink-directory &&
 380        cd .. &&
 381        ptouch gitwc/unknown-symlink-directory \
 382               svnwc/unknown-symlink-directory &&
 383        (cd svnwc; svn info unknown-symlink-directory) \
 384                2> expected.info-unknown-symlink-directory &&
 385        (cd gitwc; git-svn info unknown-symlink-directory) \
 386                2> actual.info-unknown-symlink-directory &&
 387        test_cmp expected.info-unknown-symlink-directory \
 388                 actual.info-unknown-symlink-directory
 389        "
 390
 391test_expect_success 'info --url unknown-symlink-directory' '
 392        test -z "$(cd gitwc; git-svn info --url unknown-symlink-directory \
 393                        2> ../actual.info--url-unknown-symlink-directory)" &&
 394        test_cmp expected.info-unknown-symlink-directory \
 395                 actual.info--url-unknown-symlink-directory
 396        '
 397
 398test_done