diff --git a/cmd/snapshot_create.go b/cmd/snapshot_create.go index bb9cf439..f41f1a74 100644 --- a/cmd/snapshot_create.go +++ b/cmd/snapshot_create.go @@ -32,6 +32,25 @@ func aptlySnapshotCreate(cmd *commander.Command, args []string) error { if err != nil { return fmt.Errorf("unable to create snapshot: %s", err) } + } else if len(args) == 4 && args[1] == "from" && args[2] == "repo" { + // aptly snapshot create snap from repo mirror + localRepoName, snapshotName := args[3], args[0] + + localRepoCollection := debian.NewLocalRepoCollection(context.database) + repo, err := localRepoCollection.ByName(localRepoName) + if err != nil { + return fmt.Errorf("unable to create snapshot: %s", err) + } + + err = localRepoCollection.LoadComplete(repo) + if err != nil { + return fmt.Errorf("unable to create snapshot: %s", err) + } + + snapshot, err = debian.NewSnapshotFromLocalRepo(snapshotName, repo) + if err != nil { + return fmt.Errorf("unable to create snapshot: %s", err) + } } else if len(args) == 2 && args[1] == "empty" { // aptly snapshot create snap empty snapshotName := args[0] @@ -59,12 +78,15 @@ func aptlySnapshotCreate(cmd *commander.Command, args []string) error { func makeCmdSnapshotCreate() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotCreate, - UsageLine: "create from mirror | create empty", - Short: "creates immutable snapshot of mirror contents", + UsageLine: "create from mirror | from repo | create empty", + Short: "creates immutable snapshot of mirror (local repo) contents", Long: ` Command create .. from mirror makes persistent immutable snapshot of remote repository mirror. Snapshot could be published or further modified using merge, pull and other aptly features. +Command create .. from repo makes persistent immutable snapshot of local repository. Snapshot could be processed +as mirror snapshots, and mixed with snapshots of remote mirrors. + Command create .. empty creates empty snapshot that could be used as a basis for snapshot pull operations, for example. As snapshots are immutable, creating one empty snapshot should be enough.