Skip to content

Commit

Permalink
pop command
Browse files Browse the repository at this point in the history
  • Loading branch information
DanEngelbrecht committed May 29, 2022
1 parent 4cf0a23 commit 8f93fa1
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 2 deletions.
105 changes: 105 additions & 0 deletions commands/cmd_pop.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package commands

import (
"fmt"
"io/ioutil"
"os"
"strings"
"time"

"github.com/DanEngelbrecht/golongtail/longtailutils"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)

func pop(
numWorkerCount int,
stackOffset uint32,
retainPermissions bool,
enableFileMapping bool) ([]longtailutils.StoreStat, []longtailutils.TimeStat, error) {
const fname = "get"
log := logrus.WithFields(logrus.Fields{
"fname": fname,
"stackOffset": stackOffset,
"numWorkerCount": numWorkerCount,
"retainPermissions": retainPermissions,
"enableFileMapping": enableFileMapping,
})
log.Debug(fname)

storeStats := []longtailutils.StoreStat{}
timeStats := []longtailutils.TimeStat{}

setupStartTime := time.Now()

logFile := ".longtail/log"
targetFolderPath := "."
excludeFilterRegEx := "^\\.longtail(/|$)"
blobStoreURI := ".longtail/store"

history := ""
_, err := os.Stat(logFile)
if err == nil {
historyBytes, err := ioutil.ReadFile(logFile)
if err != nil {
return storeStats, timeStats, errors.Wrap(err, fname)
}
history = string(historyBytes)
} else if !os.IsNotExist(err) {
return storeStats, timeStats, errors.Wrap(err, fname)
}

historyLines := make([]string, 0)
if history != "" {
historyLines = strings.Split(string(history), "\n")
}

if len(historyLines) < int(stackOffset+1) {
err = fmt.Errorf("stack offset out of bounds for `%s`, log contains `%d` entries, need `%d` entries", logFile, len(historyLines), int(stackOffset+1))
return storeStats, timeStats, errors.Wrap(err, fname)
}

sourceFilePath := historyLines[len(historyLines)-int(stackOffset+1)]
versionLocalStoreIndexPath := sourceFilePath[:len(sourceFilePath)-3] + "lsi"

setupTime := time.Since(setupStartTime)
timeStats = append(timeStats, longtailutils.TimeStat{"Setup", setupTime})

downSyncStoreStats, downSyncTimeStats, err := downsync(
numWorkerCount,
blobStoreURI,
sourceFilePath,
targetFolderPath,
"",
"",
retainPermissions,
false,
versionLocalStoreIndexPath,
"",
excludeFilterRegEx,
true,
false,
enableFileMapping)

storeStats = append(storeStats, downSyncStoreStats...)
timeStats = append(timeStats, downSyncTimeStats...)

return storeStats, timeStats, errors.Wrap(err, fname)
}

type PopCmd struct {
StackOffset uint32 `name:"offset" help:"Offset into log, zero equals top of stack (latest push)" default:"0"`
RetainPermissionsOption
EnableFileMappingOption
}

func (r *PopCmd) Run(ctx *Context) error {
storeStats, timeStats, err := pop(
ctx.NumWorkerCount,
r.StackOffset,
r.RetainPermissions,
r.EnableFileMapping)
ctx.StoreStats = append(ctx.StoreStats, storeStats...)
ctx.TimeStats = append(ctx.TimeStats, timeStats...)
return err
}
26 changes: 25 additions & 1 deletion commands/cmd_push.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"io/ioutil"
"os"
"strings"
"time"

"github.com/DanEngelbrecht/golongtail/longtailutils"
Expand Down Expand Up @@ -40,7 +41,8 @@ func push(
storeStats := []longtailutils.StoreStat{}
timeStats := []longtailutils.TimeStat{}

excludeFilterRegEx := ".longtail/*."
logFile := ".longtail/log"
excludeFilterRegEx := "^\\.longtail(/|$)"
sourceFolderPath := ""
targetFilePath := ".longtail/tmp.lvi"
blobStoreURI := ".longtail/store"
Expand Down Expand Up @@ -93,6 +95,28 @@ func push(
return storeStats, timeStats, errors.Wrap(err, fname)
}

history := ""
_, err = os.Stat(logFile)
if err == nil {
historyBytes, err := ioutil.ReadFile(logFile)
if err != nil {
return storeStats, timeStats, errors.Wrap(err, fname)
}
history = string(historyBytes)
} else if !os.IsNotExist(err) {
return storeStats, timeStats, errors.Wrap(err, fname)
}

historyLines := make([]string, 0)
if history != "" {
historyLines = strings.Split(string(history), "\n")
}

historyLines = append(historyLines, hashedVersionFilePath)
history = strings.Join(historyLines, "\n")

ioutil.WriteFile(logFile, []byte(history), 0666)

storeStats = append(storeStats, upSyncStoreStats...)
timeStats = append(timeStats, upSyncTimeStats...)

Expand Down
2 changes: 1 addition & 1 deletion commands/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ var Cli struct {
Unpack UnpackCmd `cmd:"" name:"unpack" help:"Unpack an archive"`
Put PutCmd `cmd:"" name:"put" help:"Upload a folder"`
Push PushCmd `cmd:"" name:"push" help:"Makes a snapshot of the current folder and store in .longtail folder"`
// Pop PopCmd `cmd:"" name:"pop" help:"Restores the most current snapshot to the current folder from store in .longtail folder"`
Pop PopCmd `cmd:"" name:"pop" help:"Restores the most current snapshot to the current folder from store in .longtail folder"`
}

0 comments on commit 8f93fa1

Please sign in to comment.