Skip to content

Fork failed to clone #5118

@jsoref

Description

@jsoref

Describe the bug

gh repo fork --clone=true ... should not try to clone until it knows that the repo is ready to be cloned (I don't know what the definition of this is, I just have observational experience that it's wrong)

gh version 2.4.0 (2021-12-21)
https://github.com/cli/cli/releases/tag/v2.4.0

Steps to reproduce the behavior

I ran a script gh-empty-clone-code with a single argument rancher/backup-restore-operator.

gh-empty-clone-code
#!/bin/sh
repo="$1"
gh repo fork --clone=false "$repo"
repo="$(echo "$repo" |perl -pne 's{^.*/}{jsoref/}')"
empty-remote "git@github.com:$repo"
gh repo fork --clone=true "$repo" --org check-spelling -- --depth 2
dir=$(basename $repo)
cd $dir && (
rsync -a ~/code/check-spelling/spell-check-this/.github .; git add .github; git checkout -b spell-check-with-spelling; git commit -m 'Add check-spelling'; perl -pi -e 'next unless s{fetch =.*}{fetch = +refs/heads/*:refs/remotes/origin/*\n}' .git/config; git push origin HEAD; open -a Visual\ Studio\ Code .
)
empty-remote
#!/bin/sh
if [ -z "$1" ]; then
  echo "$0 url-for-remote-git-repository-with-branches-or-tags-to-remove" >&2
  exit 1
fi
dispatch() {
  xargs -P10 -n25 git push "$1"
}
cd ~/code/empty
git ls-remote "$1" |perl -ne 'next if /HEAD|\{}/;s/^\S+\s+/:/;print'|dispatch "$1"

The first time it ran, it created the first repository, emptied it, created the second repository, and then failed to clone the second repository.

Expected vs actual behavior

A clear and concise description of what you expected to happen and what actually happened.

Generally

  1. cli should create a fork (without cloning)
  2. my script should empty it
  3. cli should create a fork and clone it
  4. my script should fill the repo, create a commit, push it, and open a vscode window

Actually

  1. cli created a fork (without cloning)
  2. my script emptied it
  3. cli claimed it created a fork, and failed when it tried to clone it
  4. my script couldn't find the repository and thus didn't do the rest of its work

Round 2

Running the script again,

  1. cli didn't do much of anything (since fork already exists)
  2. my script didn't do much (since the only branch left can't be deleted, this is intentional, the goal of the script is to leave just that branch)
  3. cli didn't create a fork (it already exists), but was able to clone it
  4. my script created its commit, pushed it, and opened vs code

Note: this sequence shouldn't have been necessary

Logs

% gh-empty-clone-code rancher/backup-restore-operator
✓ Created fork jsoref/backup-restore-operator
To github.com:jsoref/backup-restore-operator
 - [deleted]         v2.0.0-rc2
 - [deleted]         v2.0.0-rc3
 - [deleted]         v2.0.0-rc4
 - [deleted]         v2.0.0-rc5
 - [deleted]         v2.0.0-rc6
 - [deleted]         v2.0.0-rc7
 - [deleted]         v2.0.0-rc8
 - [deleted]         v2.0.0-rc9
 - [deleted]         v2.0.1
 - [deleted]         v2.0.1-rc1
 - [deleted]         v2.0.1-rc2
 - [deleted]         v2.1.0
 - [deleted]         v2.1.0-rc1
To github.com:jsoref/backup-restore-operator
 - [deleted]         label-all-new-issues
 - [deleted]         operator
 - [deleted]         oxr463backport-v1.0-fossa-drone
 - [deleted]         release/v1.0
 - [deleted]         restorebugfix
 - [deleted]         snyk-fix-388414a2e667775d081775e0b0d22674
 - [deleted]         snyk-fix-3da337c96647a6361bbccaed95563fed
 - [deleted]         snyk-fix-7f944f25a8306e97ad2714ed2267857a
 - [deleted]         snyk-fix-db4212e0c39f4589c92007c8a3fb6ad5
 - [deleted]         snyk-fix-e7793ac6646f9a458df382a7a0ab59e2
 - [deleted]         v0.0.1
 - [deleted]         v0.0.1-rc1
 - [deleted]         v0.0.1-rc10
 - [deleted]         v0.0.1-rc11
 - [deleted]         v0.0.1-rc12
 - [deleted]         v0.0.1-rc13
 - [deleted]         v0.0.1-rc14
 - [deleted]         v0.0.1-rc2
 - [deleted]         v0.0.1-rc3
 - [deleted]         v0.0.1-rc4
 - [deleted]         v0.0.1-rc5
 - [deleted]         v0.0.1-rc6
 - [deleted]         v0.0.1-rc7
 - [deleted]         v0.0.1-rc8
 ! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
error: failed to push some refs to 'github.com:jsoref/backup-restore-operator'
To github.com:jsoref/backup-restore-operator
 - [deleted]         v0.0.1-rc9
 - [deleted]         v0.1.0-rc1
 - [deleted]         v1.0.0
 - [deleted]         v1.0.1
 - [deleted]         v1.0.2
 - [deleted]         v1.0.3
 - [deleted]         v1.0.3-rc1
 - [deleted]         v1.0.4-rc1
 - [deleted]         v1.0.4-rc2
 - [deleted]         v1.0.4-rc3
 - [deleted]         v1.0.4-rc4
 - [deleted]         v1.1.1
 - [deleted]         v1.2.0
 - [deleted]         v1.2.0-rc1
 - [deleted]         v1.2.0-rc2
 - [deleted]         v1.2.0-rc3
 - [deleted]         v1.2.0-rc4
 - [deleted]         v1.2.0-rc5
 - [deleted]         v1.2.0-rc6
 - [deleted]         v1.2.1
 - [deleted]         v1.2.1-rc1
 - [deleted]         v2.0.0
 - [deleted]         v2.0.0-rc1
 - [deleted]         v2.0.0-rc10
 - [deleted]         v2.0.0-rc11
✓ Created fork check-spelling/backup-restore-operator
Cloning into 'backup-restore-operator'...
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
failed to clone fork: exit status 128
/Users/jsoref/bin/gh-empty-clone-code: line 8: cd: backup-restore-operator: No such file or directory
% sh -x `which gh-empty-clone-code` rancher/backup-restore-operator
+ repo=rancher/backup-restore-operator
+ gh repo fork --clone=false rancher/backup-restore-operator
! jsoref/backup-restore-operator already exists
++ echo rancher/backup-restore-operator
++ perl -pne 's{^.*/}{jsoref/}'
+ repo=jsoref/backup-restore-operator
+ empty-remote git@github.com:jsoref/backup-restore-operator
To github.com:jsoref/backup-restore-operator
 ! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
error: failed to push some refs to 'github.com:jsoref/backup-restore-operator'
+ gh repo fork --clone=true jsoref/backup-restore-operator --org check-spelling -- --depth 2
! check-spelling/backup-restore-operator already exists
Cloning into 'backup-restore-operator'...
remote: Enumerating objects: 130, done.
remote: Counting objects: 100% (130/130), done.
remote: Compressing objects: 100% (113/113), done.
remote: Total 130 (delta 18), reused 57 (delta 4), pack-reused 0
Receiving objects: 100% (130/130), 104.98 KiB | 1.59 MiB/s, done.
Resolving deltas: 100% (18/18), done.
Updating upstream
From github.com:jsoref/backup-restore-operator
 * [new branch]      master     -> upstream/master
✓ Cloned fork
++ basename jsoref/backup-restore-operator
+ dir=backup-restore-operator
+ cd backup-restore-operator
+ rsync -a /Users/jsoref/code/check-spelling/spell-check-this/.github .
+ git add .github
+ git checkout -b spell-check-with-spelling
Switched to a new branch 'spell-check-with-spelling'
+ git commit -m 'Add check-spelling'
[spell-check-with-spelling 2f0897e] Add check-spelling
 9 files changed, 197 insertions(+)
 create mode 100644 .github/actions/spelling/README.md
 create mode 100644 .github/actions/spelling/advice.md
 create mode 100644 .github/actions/spelling/allow.txt
 create mode 100644 .github/actions/spelling/excludes.txt
 create mode 100644 .github/actions/spelling/expect.txt
 create mode 100644 .github/actions/spelling/line_forbidden.patterns
 create mode 100644 .github/actions/spelling/patterns.txt
 create mode 100644 .github/actions/spelling/reject.txt
 create mode 100644 .github/workflows/spelling.yml
+ perl -pi -e 'next unless s{fetch =.*}{fetch = +refs/heads/*:refs/remotes/origin/*\n}' .git/config
+ git push origin HEAD
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 8 threads
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 3.36 KiB | 1.68 MiB/s, done.
Total 14 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote:
remote: Create a pull request for 'spell-check-with-spelling' on GitHub by visiting:
remote:      https://github.com/check-spelling/backup-restore-operator/pull/new/spell-check-with-spelling
remote:
To github.com:check-spelling/backup-restore-operator.git
 * [new branch]      HEAD -> spell-check-with-spelling
+ open -a 'Visual Studio Code' .

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-investigationCLI team needs to investigatepriority-3Affects a small number of users or is largely cosmetic

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions