# file      : tests/rep-fetch-git-refname.testscript
# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
# license   : MIT; see accompanying LICENSE file

: fetch
:
{
  $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment";

  if ($git_protocol == 'https-dumb')
    warn = "$warn_ref_hist$reason_dumb$warn_dumb"
  end;

  $* 2>>~"%EOE%"
    %fetching git:.+libfoo$fragment%
    %querying .+libfoo\.git%
    %fetching from .+libfoo\.git%
    $warn
    1 package\(s\) in 1 repository\(s\)
    EOE
}

: re-fetch
:
{
  : unchanged
  :
  {
    $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment";

    $* 2>!;

    $* 2>>~"%EOE%"
      %fetching git:.+libfoo$fragment%
      %querying .+libfoo\.git%
      1 package\(s\) in 1 repository\(s\)
      EOE
  }

  : changed
  :
  {
    g = git -C
    u = "$rep_git/state1"
    d = cfg/libfoo-1.0.0

    $clone_root_cfg && $rep_add "$rep/state0/libfoo.git$fragment";

    # Extract the repository path from the output line like this:
    #
    # fetching from <url> in 'cfg/.bpkg/tmp/4bde15f59461'...
    #
    $* --verbose 2 2>&1                               | \
      sed -n -e "s/fetching from .+ in '\(.+\)'/\$1/p"  | \
      sed -n -e 's%(.+[\\/])tmp([\\/].+)%$1repos$2%p' | \
      set r;

    # Note that the commit for doc/style/basic submodule is not at the branch
    # tip and so is not advertised.
    #
    warn1 = '%.{0}';
    warn2 = '%.{0}';
    warn3 = '%.{0}';

    if ($git_protocol == 'local'       || \
        $git_protocol == 'https-smart' || \
        $git_protocol == 'git')
      warn2 = "$warn_repo_hist for submodule 'doc/style/basic'$reason_unadv"
    elif ($git_protocol == 'https-dumb')
      warn1 = "$warn_ref_hist for submodule 'doc/style'$reason_dumb$warn_dumb"
      warn2 = "$warn_repo_hist for submodule 'doc/style/basic'$reason_dumb$warn_dumb"
      warn3 = "$warn_ref_hist for submodule 'libbar'$reason_dumb$warn_dumb"
    end;

    $pkg_checkout libfoo/1.0.0 2>>~"%EOE%";
      checking out libfoo/1.0.0
      %querying .+style\.git%?
      %fetching submodule 'doc/style' from .+style\.git%
      $warn1
      %submodule path 'doc/style': checked out .+%
      %querying .+style-basic\.git%?
      %fetching submodule 'doc/style/basic' from .+style-basic\.git%
      $warn2
      %submodule path 'doc/style/basic': checked out .+%
      %querying .+libbar\.git%?
      %fetching submodule 'libbar' from .+libbar\.git%
      $warn3
      %submodule path 'libbar': checked out .+%
      distributing libfoo/1.0.0
      checked out libfoo/1.0.0
      EOE

    $g "$r" config remote.origin.url "$u/libfoo.git";

    # Preconditions.
    #
    test -f $d/tests/TODO;
    test -f $d/libbar/libbar/manifest;
    test -f $d/doc/style/README != 0;
    test -d $d/libbaz != 0;

    if ($git_protocol == 'https-dumb')
      warn = "$warn_ref_hist$reason_dumb$warn_dumb"
    end;

    $* 2>>~"%EOE%" 1>&2;
      %fetching git:.+libfoo$fragment%
      %querying .+libfoo\.git%
      %fetching from .+libfoo\.git%
      $warn
      %warning: unable to rmdir .?libbar.?: .+%
      1 package\(s\) in 1 repository\(s\)
      EOE

    $pkg_drop libfoo;

    warn1 = '%.{0}';
    warn2 = '%.{0}';

    if ($git_protocol == 'https-dumb')
      warn1 = "$warn_ref_hist for submodule 'doc/style'$reason_dumb$warn_dumb"
      warn2 = "$warn_ref_hist for submodule 'libbaz'$reason_dumb$warn_dumb"
    end;

    $pkg_checkout libfoo/1.0.0 2>>~"%EOE%";
      checking out libfoo/1.0.0
      %querying .+style\.git%?
      %fetching submodule 'doc/style' from .+style\.git%
      $warn1
      %submodule path 'doc/style': checked out .+%
      %querying .+libbaz\.git%?
      %fetching submodule 'libbaz' from .+libbaz\.git%
      $warn2
      %submodule path 'libbaz': checked out .+%
      distributing libfoo/1.0.0
      checked out libfoo/1.0.0
      EOE

    # Postconditions.
    #
    test -d $d/tests != 0;
    test -d $d/libbar != 0;
    test -f $d/doc/style/README;
    test -f $d/libbaz/manifest;

    $pkg_drop libfoo
  }
}