Skip to content
Merged
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
35 changes: 12 additions & 23 deletions cli/download.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,9 @@ func handleGitHubDownload(rawURL string, args []string, depth int, skipHistory b
cleanup := func() {
if createdDir {
// Change back to original directory first
os.Chdir(originalDir)
if err := os.Chdir(originalDir); err != nil {
log.Printf("Warning: failed to change back to original directory: %v", err)
}
// Remove the target directory
if err := os.RemoveAll(filepath.Join(originalDir, targetDir)); err != nil {
log.Printf("Warning: Failed to cleanup directory '%s': %v", targetDir, err)
Expand Down Expand Up @@ -323,7 +325,9 @@ func handleGitLabDownload(rawURL string, args []string, baseURL string, depth in
// Cleanup function to remove directory on failure
cleanup := func() {
if createdDir {
os.Chdir(originalDir)
if err := os.Chdir(originalDir); err != nil {
log.Printf("Warning: failed to change back to original directory: %v", err)
}
if err := os.RemoveAll(filepath.Join(originalDir, targetDir)); err != nil {
log.Printf("Warning: Failed to cleanup directory '%s': %v", targetDir, err)
} else {
Expand Down Expand Up @@ -450,7 +454,9 @@ func handleGenericGitDownload(rawURL string, args []string, depth int, skipHisto
// Cleanup function to remove directory on failure
cleanup := func() {
if createdDir {
os.Chdir(originalDir)
if err := os.Chdir(originalDir); err != nil {
log.Printf("Warning: failed to change back to original directory: %v", err)
}
if err := os.RemoveAll(filepath.Join(originalDir, targetDir)); err != nil {
log.Printf("Warning: Failed to cleanup directory '%s': %v", targetDir, err)
} else {
Expand Down Expand Up @@ -727,26 +733,9 @@ Use --with-history to download full commit history (requires API, subject to rat
return handleGenericGitDownload(url, args, depth, skipHistory, includeTags, username, password, token, sshKey)
}

// Standard Ivaldi remote download
targetDir := ""
if len(args) > 1 {
targetDir = args[1]
} else {
// Extract directory name from URL
parts := strings.Split(strings.TrimSuffix(url, "/"), "/")
targetDir = strings.TrimSuffix(parts[len(parts)-1], ".git")
}

// Check if directory already exists
if _, err := os.Stat(targetDir); !os.IsNotExist(err) {
return fmt.Errorf("directory '%s' already exists", targetDir)
}

// TODO: Implement actual download/clone functionality for standard Ivaldi remotes
fmt.Printf("Downloading repository from '%s' into '%s'...\n", url, targetDir)
fmt.Println("Note: Standard Ivaldi remote download functionality not yet implemented.")

return nil
// Treat unrecognized URLs as generic Git URLs - most URLs are Git-compatible
// This handles self-hosted Git servers, file:// URLs, and other Git transports
return handleGenericGitDownload(url, args, depth, skipHistory, includeTags, username, password, token, sshKey)
},
}

Expand Down
26 changes: 21 additions & 5 deletions cli/fuse.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cli
import (
"bufio"
"fmt"
"log"
"os"
"path/filepath"
"strings"
Expand Down Expand Up @@ -251,14 +252,21 @@ func handleMerge(ivaldiDir, workDir string, casStore cas.CAS, refsManager *refs.
if len(targetCommit.Parents) > 0 {
baseCommit, err := commit.NewCommitReader(casStore).ReadCommit(targetCommit.Parents[0])
if err == nil {
baseIndex, _ = getCommitWorkspaceIndex(casStore, baseCommit)
baseIndex, err = getCommitWorkspaceIndex(casStore, baseCommit)
if err != nil {
log.Printf("Warning: could not get base workspace index: %v", err)
}
}
}

// If no base, use empty workspace
if baseIndex.Count == 0 {
wsBuilder := wsindex.NewBuilder(casStore)
baseIndex, _ = wsBuilder.Build(nil)
var err error
baseIndex, err = wsBuilder.Build(nil)
if err != nil {
log.Printf("Warning: could not build empty workspace index: %v", err)
}
}

// Parse merge strategy
Expand Down Expand Up @@ -399,7 +407,9 @@ func handleMerge(ivaldiDir, workDir string, casStore cas.CAS, refsManager *refs.

// Generate seal name
sealName := seals.GenerateSealName(mergeHashArray)
_ = refsManager.StoreSealName(sealName, mergeHashArray, fmt.Sprintf("Fuse %s into %s", sourceTimeline, targetTimeline))
if err := refsManager.StoreSealName(sealName, mergeHashArray, fmt.Sprintf("Fuse %s into %s", sourceTimeline, targetTimeline)); err != nil {
log.Printf("Warning: failed to store seal name: %v", err)
}

// Clean up resolution storage (merge succeeded)
resStorage := diffmerge.NewResolutionStorage(ivaldiDir)
Expand Down Expand Up @@ -647,7 +657,11 @@ func continueMerge(ivaldiDir, workDir string) error {
}
var baseCommit *commit.CommitObject
if len(targetCommit.Parents) > 0 {
baseCommit, _ = commitReader.ReadCommit(targetCommit.Parents[0])
var err error
baseCommit, err = commitReader.ReadCommit(targetCommit.Parents[0])
if err != nil {
log.Printf("Warning: could not read base commit: %v", err)
}
}

// Resolve each conflicting file interactively
Expand Down Expand Up @@ -781,7 +795,9 @@ func continueMerge(ivaldiDir, workDir string) error {

// Generate seal name
sealName := seals.GenerateSealName(mergeHashArray)
_ = refsManager.StoreSealName(sealName, mergeHashArray, fmt.Sprintf("Fuse %s into %s", state.SourceTimeline, state.TargetTimeline))
if err := refsManager.StoreSealName(sealName, mergeHashArray, fmt.Sprintf("Fuse %s into %s", state.SourceTimeline, state.TargetTimeline)); err != nil {
log.Printf("Warning: failed to store seal name: %v", err)
}

// Clean up merge state
os.Remove(filepath.Join(ivaldiDir, "MERGE_HEAD"))
Expand Down
Loading