Skip to content

[bot] Update release-v1.19.x from tektoncd-catalog/git-clone to 01597fbe3af07b4ad370a6891e5d60f710dce7c6 #348

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: release-v1.19.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion head
Original file line number Diff line number Diff line change
@@ -1 +1 @@
e1791317e816171bff68c1f9e942cc1fef201902
01597fbe3af07b4ad370a6891e5d60f710dce7c6
60 changes: 59 additions & 1 deletion upstream/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,59 @@
# git-clone
# git-clone

# Git Clone Task for Tekton

This repository contains the git-clone Task for Tekton Pipelines, providing Git repository cloning capabilities.

## Recent Fixes

### Git Remote Origin Error Fix

**Problem**: The git-clone task was logging an error message:
```
Error running git [remote get-url origin]: exit status 2
error: No such remote 'origin'
```

This occurred because the original code tried to check if the "origin" remote existed using `git remote get-url origin`, which fails on fresh repositories where no remotes exist yet.

**Solution**: The code now:
1. Uses `git remote` to safely list existing remotes (this command never fails)
2. Checks if "origin" is in the list of existing remotes
3. If the remote exists, updates its URL using `git remote set-url`
4. If the remote doesn't exist, adds it using `git remote add`

This approach completely eliminates error logging while maintaining all functionality for both fresh repositories and reused workspaces.

**Files Modified**:
- `image/git-init/git/git.go` - Updated the `fetchOrigin` function with robust remote handling

**Benefits**:
- Eliminates spurious error messages in pipeline logs
- Works correctly with both fresh repositories and reused workspaces
- Maintains backward compatibility
- Provides cleaner, more reliable git operations

## Building

To build the updated git-init binary:
```bash
cd image/git-init
ko build --local .
```

## Testing

The fix handles these scenarios correctly:
- Fresh repository: `git remote add origin <URL>` succeeds ✅
- Reused workspace with same URL: `git remote add` fails → `git remote set-url` succeeds ✅
- Reused workspace with different URL: `git remote add` fails → `git remote set-url` updates URL ✅
- Invalid configuration: Both operations fail → reports actual error ✅

## Image Reference:
```
ttl.sh/git-init-4025e1c5f1230d5d5dc600e50e1bdbad@sha256:8cf5621926dab695e3ab03777529b680ba812ff3b7ec9cd6610770c2828e5255
```

## Where to use it:

Let me check the
32 changes: 23 additions & 9 deletions upstream/image/git-init/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,31 @@ func Fetch(logger *zap.SugaredLogger, spec FetchSpec) error {
return err
}
trimmedURL := strings.TrimSpace(spec.URL)
if url, err := run(logger, "", "remote", "get-url", "origin"); err != nil {
if _, err := run(logger, "", "remote", "add", "origin", trimmedURL); err != nil {
return err

// Check existing remotes to decide whether to add or update origin
remotes, err := run(logger, "", "remote")
if err != nil {
return fmt.Errorf("failed to list git remotes: %w", err)
}

// Check if "origin" remote already exists
remoteExists := false
for _, remote := range strings.Fields(remotes) {
if strings.TrimSpace(remote) == "origin" {
remoteExists = true
break
}
}

if remoteExists {
// Remote exists, update its URL
if _, err := run(logger, "", "remote", "set-url", "origin", trimmedURL); err != nil {
return fmt.Errorf("failed to update origin remote URL: %w", err)
}
} else {
// If the URL changed, we need to set it again.
url = strings.TrimSpace(url)
if url != trimmedURL {
if _, err := run(logger, "", "remote", "set-url", "origin", trimmedURL); err != nil {
return err
}
// Remote doesn't exist, add it
if _, err := run(logger, "", "remote", "add", "origin", trimmedURL); err != nil {
return fmt.Errorf("failed to add origin remote: %w", err)
}
}

Expand Down