<commit_before>function omf.repo.pull

  if test (count $argv) -eq 0
    echo (omf::err)"Argument of omf.repo.pull is the repo path."(omf::off)
    return $OMF_MISSING_ARG
  end

  set -l repo_dir $argv[1]

  function omf.repo.git -V repo_dir
    command git --git-dir "$repo_dir"/.git --work-tree "$repo_dir" $argv
  end

  function omf.repo.git.stash -V repo_dir
    command git -C "$repo_dir" stash $argv
  end

  set -l remote origin
  if test (omf.repo.git config --get remote.upstream.url)
    set remote upstream
  end

  set initial_branch (omf.repo.git symbolic-ref -q --short HEAD);
    or return $OMF_UNKNOWN_ERR
  set initial_revision (omf.repo.git rev-parse -q --verify HEAD);
    or return $OMF_UNKNOWN_ERR

  if not omf.repo.git diff --quiet
    echo (omf::em)"Stashing your changes:"(omf::off)
    omf.repo.git status --short --untracked-files
    omf.repo.git.stash save --include-untracked --quiet;
      and set stashed
  end

  if test "$initial_branch" != master
    omf.repo.git checkout master --quiet
  end

  set -l refspec "refs/heads/master:refs/remotes/$remote/master"

  # the refspec ensures that '$remote/master' gets updated
  if not omf.repo.git pull --ff-only --quiet $remote $refspec
    omf.repo.git checkout $initial_branch
    omf.repo.git reset --hard $initial_revision
    set -q stashed; and omf.repo.git.stash pop
  end

  if test "$initial_branch" != master
    omf.repo.git checkout $initial_branch --quiet
  end

  if set -q stashed
    omf.repo.git.stash pop --quiet

    echo (omf::em)"Restored your changes:"(omf::off)
    command git -C "$repo_dir" status --short --untracked-files
  end

  functions -e omf.repo.git{,.stash}
  return 0
end<commit_msg>When pulling a repo, fetch first, to check for updates<commit_after>function omf.repo.pull

  if test (count $argv) -eq 0
    echo (omf::err)"omf.repo.pull takes a repository path as an argument."(omf::off) 1>&2
    return $OMF_MISSING_ARG
  end

  set -l repo_dir $argv[1]

  function __omf.repo.git -V repo_dir
    command git -C "$repo_dir" $argv
  end

  set -l remote origin
  if test (__omf.repo.git config --get remote.upstream.url)
    set remote upstream
  end

  set initial_branch (__omf.repo.git symbolic-ref -q --short HEAD);
    or return 1
  set initial_revision (__omf.repo.git rev-parse -q --verify HEAD);
    or return 1

  # the refspec ensures that '$remote/master' gets updated
  set -l refspec "refs/heads/master:refs/remotes/$remote/master"
  __omf.repo.git fetch --quiet $remote $refspec;
    or return 1

  if test (__omf.repo.git rev-list --count master...FETCH_HEAD) -eq 0
    return 2
  end

  if not __omf.repo.git diff --quiet
    echo (omf::em)"Stashing your changes:"(omf::off)
    __omf.repo.git status --short --untracked-files
    __omf.repo.git stash save --include-untracked --quiet;
      and set stashed
  end

  if test "$initial_branch" != master
    __omf.repo.git checkout master --quiet
  end

  if not __omf.repo.git merge --ff-only --quiet FETCH_HEAD
    __omf.repo.git checkout $initial_branch
    __omf.repo.git reset --hard $initial_revision
    set -q stashed; and __omf.repo.git stash pop
    return 1
  end

  if test "$initial_branch" != master
    __omf.repo.git checkout $initial_branch --quiet
  end

  if set -q stashed
    __omf.repo.git stash pop --quiet

    echo (omf::em)"Restored your changes:"(omf::off)
    __omf.repo.git status --short --untracked-files
  end

  return 0
end
{'fraction_non_alphanumeric': 0.11417780360255665, 'fraction_numerical': 0.004067402672864613, 'mean_word_length': 2.89920724801812, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4115247', 'n_tokens_mistral': 1271, 'n_tokens_neox': 1199, 'n_words': 368}