2
2
mirror of https://github.com/octoleo/restic.git synced 2024-11-22 12:55:18 +00:00
restic/snapshot.go

81 lines
1.5 KiB
Go
Raw Normal View History

2014-12-05 20:45:49 +00:00
package restic
2014-08-04 18:47:04 +00:00
import (
2014-08-11 20:47:24 +00:00
"fmt"
2014-08-04 18:47:04 +00:00
"os"
"os/user"
2014-09-23 20:39:12 +00:00
"path/filepath"
"strconv"
2014-08-04 18:47:04 +00:00
"time"
2014-09-23 20:39:12 +00:00
2014-12-05 20:45:49 +00:00
"github.com/restic/restic/backend"
2014-08-04 18:47:04 +00:00
)
type Snapshot struct {
2014-11-21 20:21:44 +00:00
Time time.Time `json:"time"`
2014-11-30 21:34:21 +00:00
Parent backend.ID `json:"parent,omitempty"`
Tree backend.ID `json:"tree"`
2014-11-23 21:26:01 +00:00
Map backend.ID `json:"map"`
2014-11-21 20:21:44 +00:00
Dir string `json:"dir"`
Hostname string `json:"hostname,omitempty"`
Username string `json:"username,omitempty"`
UID uint32 `json:"uid,omitempty"`
GID uint32 `json:"gid,omitempty"`
2014-09-23 20:39:12 +00:00
id backend.ID // plaintext ID, used during restore
2014-11-23 21:26:01 +00:00
bl *BlobList
2014-08-04 18:47:04 +00:00
}
func NewSnapshot(dir string) (*Snapshot, error) {
2014-09-23 20:39:12 +00:00
d, err := filepath.Abs(dir)
if err != nil {
d = dir
}
2014-08-04 18:47:04 +00:00
sn := &Snapshot{
2014-09-23 20:39:12 +00:00
Dir: d,
2014-08-04 18:47:04 +00:00
Time: time.Now(),
}
hn, err := os.Hostname()
if err == nil {
sn.Hostname = hn
}
usr, err := user.Current()
if err == nil {
sn.Username = usr.Username
uid, err := strconv.ParseInt(usr.Uid, 10, 32)
if err != nil {
return nil, err
}
sn.UID = uint32(uid)
gid, err := strconv.ParseInt(usr.Gid, 10, 32)
if err != nil {
return nil, err
}
sn.GID = uint32(gid)
2014-08-04 18:47:04 +00:00
}
return sn, nil
2014-08-04 18:47:04 +00:00
}
2014-09-23 20:39:12 +00:00
func LoadSnapshot(ch *ContentHandler, id backend.ID) (*Snapshot, error) {
sn := &Snapshot{id: id}
2014-09-23 20:39:12 +00:00
err := ch.LoadJSON(backend.Snapshot, id, sn)
2014-08-04 20:46:14 +00:00
if err != nil {
return nil, err
}
return sn, nil
2014-08-04 18:47:04 +00:00
}
2014-08-11 20:47:24 +00:00
func (sn Snapshot) String() string {
2014-09-23 20:39:12 +00:00
return fmt.Sprintf("<Snapshot %q at %s>", sn.Dir, sn.Time)
2014-08-11 20:47:24 +00:00
}
func (sn Snapshot) ID() backend.ID {
return sn.id
}