mirror of
https://github.com/cheat/cheat.git
synced 2024-11-22 14:01:36 +01:00
80c91cbdee
Integrate `go-git` into the application, and use it to `git clone` cheatsheets when the installer runs. Previously, the installer required that `git` be installed on the system `PATH`, so this change has to big advantages: 1. It removes that system dependency on `git` 2. It paves the way for implementing the `--update` command Additionally, `cheat` now performs a `--depth=1` clone when installing cheatsheets, which should at least somewhat improve installation times (especially on slow network connections).
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package token
|
|
|
|
type serializedFile struct {
|
|
// fields correspond 1:1 to fields with same (lower-case) name in File
|
|
Name string
|
|
Base int
|
|
Size int
|
|
Lines []int
|
|
Infos []lineInfo
|
|
}
|
|
|
|
type serializedFileSet struct {
|
|
Base int
|
|
Files []serializedFile
|
|
}
|
|
|
|
// Read calls decode to deserialize a file set into s; s must not be nil.
|
|
func (s *FileSet) Read(decode func(interface{}) error) error {
|
|
var ss serializedFileSet
|
|
if err := decode(&ss); err != nil {
|
|
return err
|
|
}
|
|
|
|
s.mutex.Lock()
|
|
s.base = ss.Base
|
|
files := make([]*File, len(ss.Files))
|
|
for i := 0; i < len(ss.Files); i++ {
|
|
f := &ss.Files[i]
|
|
files[i] = &File{s, f.Name, f.Base, f.Size, f.Lines, f.Infos}
|
|
}
|
|
s.files = files
|
|
s.last = nil
|
|
s.mutex.Unlock()
|
|
|
|
return nil
|
|
}
|
|
|
|
// Write calls encode to serialize the file set s.
|
|
func (s *FileSet) Write(encode func(interface{}) error) error {
|
|
var ss serializedFileSet
|
|
|
|
s.mutex.Lock()
|
|
ss.Base = s.base
|
|
files := make([]serializedFile, len(s.files))
|
|
for i, f := range s.files {
|
|
files[i] = serializedFile{f.name, f.base, f.size, f.lines, f.infos}
|
|
}
|
|
ss.Files = files
|
|
s.mutex.Unlock()
|
|
|
|
return encode(ss)
|
|
}
|