Skip to content
stash a file or a tree of files for later reuse - a bit like git stash
Go Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
sample-stash
.gitignore
.travis.yml
LICENSE
README.md
fstash_test.go
go.mod
go.sum
main.go
scratchpad.md
stash.go

README.md

Go Report Card Build Status

fstash

Stash a file or a tree of files for later reuse - a bit like git stash. Prebuilt binaries are available for Linux, Windows and Darwin. Just extract it somewhere inside your $PATH.

It skips .git directory.

test

Use this command:

$ go test -v *.go

usage story

Assume you write various applications and for each new project you add some initial files as the beginning skeleton. Also you replace some strings or expand some templates to add various information to the application, like author or other metadata.

This is one the of best fitting scenarios for using fstash. You create a stash from the skeleton files and then expand it whenever you are creating a new project. Also it is possible to provide the metadata to be injected into files.

As an example take a look at sample-stash directory. In this directory there is a Go file named variables.go. This file contains some variables that will be filled at compile time by Go compiler and come from build.sh file. Also there are two other variables Author and License which will be filled when we expand this stash for a new project.

First let’s create the stash:

$ cd sample-stash/
$ fstash create -n newproject

Now let’s create a new project which skeleton will be created from that stash:

$ cd ~/Documents/
$ mkdir newapp
$ cd newapp/
$ fstash expand -n newproject variables='{"Author":"Kaveh","License":"MIT"}'

Last command expands the stash we created in previous step, into current directory. The part variables='{"Author":"Kaveh","License":"MIT"}' indicates that variables.go is a (Go) text template file and the provided JSON should be passed to it as model data.

Now the content of variables.go is:

package main

// build flags
var (
        BuildTime  string
        CommitHash string
        GoVersion  string
        GitTag     string
)

// package info
const (
        Author  = "Kaveh"
        License = "MIT"
)

Tada! :)

I hope you find this tool useful.

You can’t perform that action at this time.