Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 45f0c9b

Browse files
committed
select: add new "select" command for choosing the default database
1 parent e003471 commit 45f0c9b

22 files changed

Lines changed: 403 additions & 69 deletions

cmd/branchActiveGet.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,27 @@ func init() {
2222

2323
func branchActiveGet(args []string) error {
2424
// Ensure a database file was given
25+
var db string
26+
var err error
27+
var meta metaData
2528
if len(args) == 0 {
26-
return errors.New("No database file specified")
29+
db, err = getDefaultDatabase()
30+
if err != nil {
31+
return err
32+
}
33+
if db == "" {
34+
// No database name was given on the command line, and we don't have a default database selected
35+
return errors.New("No database file specified")
36+
}
37+
} else {
38+
db = args[0]
2739
}
2840
if len(args) > 1 {
2941
return errors.New("Only one database can be worked with at a time (for now)")
3042
}
3143

3244
// Load the local metadata cache, without retrieving updated metadata from the cloud
33-
db := args[0]
34-
meta, err := localFetchMetadata(db, false)
45+
meta, err = localFetchMetadata(db, false)
3546
if err != nil {
3647
return err
3748
}

cmd/branchActiveSet.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,20 @@ func init() {
3535

3636
func branchActiveSet(args []string) error {
3737
// Ensure a database file was given
38+
var db string
39+
var err error
40+
var meta metaData
3841
if len(args) == 0 {
39-
return errors.New("No database file specified")
42+
db, err = getDefaultDatabase()
43+
if err != nil {
44+
return err
45+
}
46+
if db == "" {
47+
// No database name was given on the command line, and we don't have a default database selected
48+
return errors.New("No database file specified")
49+
}
50+
} else {
51+
db = args[0]
4052
}
4153
if len(args) > 1 {
4254
return errors.New("Only one database can be changed at a time (for now)")
@@ -48,8 +60,7 @@ func branchActiveSet(args []string) error {
4860
}
4961

5062
// If there's no local metadata cache, then create one
51-
db := args[0]
52-
meta, err := loadMetadata(db)
63+
meta, err = loadMetadata(db)
5364
if err != nil {
5465
return err
5566
}

cmd/branchCreate.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,20 @@ func init() {
2727

2828
func branchCreate(args []string) error {
2929
// Ensure a database file was given
30+
var db string
31+
var err error
32+
var meta metaData
3033
if len(args) == 0 {
31-
return errors.New("No database file specified")
34+
db, err = getDefaultDatabase()
35+
if err != nil {
36+
return err
37+
}
38+
if db == "" {
39+
// No database name was given on the command line, and we don't have a default database selected
40+
return errors.New("No database file specified")
41+
}
42+
} else {
43+
db = args[0]
3244
}
3345
if len(args) > 1 {
3446
return errors.New("Only one database can be changed at a time (for now)")
@@ -43,8 +55,7 @@ func branchCreate(args []string) error {
4355
}
4456

4557
// Load the metadata
46-
db := args[0]
47-
meta, err := loadMetadata(db)
58+
meta, err = loadMetadata(db)
4859
if err != nil {
4960
return err
5061
}

cmd/branchList.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,28 @@ func init() {
2626

2727
func branchList(args []string) error {
2828
// Ensure a database file was given
29+
var db string
30+
var err error
31+
var meta metaData
2932
if len(args) == 0 {
30-
return errors.New("No database file specified")
33+
db, err = getDefaultDatabase()
34+
if err != nil {
35+
return err
36+
}
37+
if db == "" {
38+
// No database name was given on the command line, and we don't have a default database selected
39+
return errors.New("No database file specified")
40+
}
41+
} else {
42+
db = args[0]
3143
}
3244
if len(args) > 1 {
3345
return errors.New("Only one database can be worked with at a time (for now)")
3446
}
3547

3648
// If there is a local metadata cache for the requested database, use that. Otherwise, retrieve it from the
3749
// server first (without storing it)
38-
db := args[0]
39-
meta := metaData{}
50+
meta = metaData{}
4051
md, err := ioutil.ReadFile(filepath.Join(".dio", db, "metadata.json"))
4152
if err == nil {
4253
err = json.Unmarshal([]byte(md), &meta)

cmd/branchRemove.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,20 @@ func init() {
2525

2626
func branchRemove(args []string) error {
2727
// Ensure a database file was given
28+
var db string
29+
var err error
30+
var meta metaData
2831
if len(args) == 0 {
29-
return errors.New("No database file specified")
32+
db, err = getDefaultDatabase()
33+
if err != nil {
34+
return err
35+
}
36+
if db == "" {
37+
// No database name was given on the command line, and we don't have a default database selected
38+
return errors.New("No database file specified")
39+
}
40+
} else {
41+
db = args[0]
3042
}
3143
if len(args) > 1 {
3244
return errors.New("Only one database can be changed at a time (for now)")
@@ -38,8 +50,7 @@ func branchRemove(args []string) error {
3850
}
3951

4052
// Load the metadata
41-
db := args[0]
42-
meta, err := loadMetadata(db)
53+
meta, err = loadMetadata(db)
4354
if err != nil {
4455
return err
4556
}

cmd/branchRevert.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,20 @@ func init() {
3838

3939
func branchRevert(args []string) error {
4040
// Ensure a database file was given
41+
var db string
42+
var err error
43+
var meta metaData
4144
if len(args) == 0 {
42-
return errors.New("No database file specified")
45+
db, err = getDefaultDatabase()
46+
if err != nil {
47+
return err
48+
}
49+
if db == "" {
50+
// No database name was given on the command line, and we don't have a default database selected
51+
return errors.New("No database file specified")
52+
}
53+
} else {
54+
db = args[0]
4355
}
4456
if len(args) > 1 {
4557
return errors.New("Only one database can be changed at a time (for now)")
@@ -56,8 +68,7 @@ func branchRevert(args []string) error {
5668
}
5769

5870
// Load the metadata
59-
db := args[0]
60-
meta, err := loadMetadata(db)
71+
meta, err = loadMetadata(db)
6172
if err != nil {
6273
return err
6374
}

cmd/branchUpdate.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,20 @@ func init() {
3131

3232
func branchUpdate(args []string) error {
3333
// Ensure a database file was given
34+
var db string
35+
var err error
36+
var meta metaData
3437
if len(args) == 0 {
35-
return errors.New("No database file specified")
38+
db, err = getDefaultDatabase()
39+
if err != nil {
40+
return err
41+
}
42+
if db == "" {
43+
// No database name was given on the command line, and we don't have a default database selected
44+
return errors.New("No database file specified")
45+
}
46+
} else {
47+
db = args[0]
3648
}
3749
if len(args) > 1 {
3850
return errors.New("Only one database can be changed at a time (for now)")
@@ -47,8 +59,7 @@ func branchUpdate(args []string) error {
4759
}
4860

4961
// Load the metadata
50-
db := args[0]
51-
meta, err := loadMetadata(db)
62+
meta, err = loadMetadata(db)
5263
if err != nil {
5364
return err
5465
}

cmd/commit.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,20 @@ func init() {
4949

5050
func commit(args []string) error {
5151
// Ensure a database file was given
52+
var db string
53+
var err error
54+
var meta metaData
5255
if len(args) == 0 {
53-
return errors.New("No database file specified")
56+
db, err = getDefaultDatabase()
57+
if err != nil {
58+
return err
59+
}
60+
if db == "" {
61+
// No database name was given on the command line, and we don't have a default database selected
62+
return errors.New("No database file specified")
63+
}
64+
} else {
65+
db = args[0]
5466
}
5567
// TODO: Allow giving multiple database files on the command line. Hopefully just needs turning this
5668
// TODO into a for loop
@@ -59,7 +71,6 @@ func commit(args []string) error {
5971
}
6072

6173
// Ensure the database file exists
62-
db := args[0]
6374
fi, err := os.Stat(db)
6475
if err != nil {
6576
return err
@@ -98,7 +109,6 @@ func commit(args []string) error {
98109

99110
// If the database metadata doesn't exist locally, check if it does exist on the server.
100111
var newDB, localPresent bool
101-
var meta metaData
102112
if _, err = os.Stat(filepath.Join(".dio", db, "db")); os.IsNotExist(err) {
103113
// At the moment, since there's no better way to check for the existence of a remote database, we just
104114
// grab the list of the users databases and check against that

cmd/log.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,28 @@ func init() {
2727

2828
func branchLog(args []string) error {
2929
// Ensure a database file was given
30+
var db string
31+
var err error
3032
if len(args) == 0 {
31-
return errors.New("no database file specified")
33+
db, err = getDefaultDatabase()
34+
if err != nil {
35+
return err
36+
}
37+
if db == "" {
38+
// No database name was given on the command line, and we don't have a default database selected
39+
return errors.New("No database file specified")
40+
}
41+
} else {
42+
db = args[0]
3243
}
3344
if len(args) > 1 {
3445
return errors.New("only one database can be worked with at a time (for now)")
3546
}
3647

3748
// If there is a local metadata cache for the requested database, use that. Otherwise, retrieve it from the
3849
// server first (without storing it)
39-
db := args[0]
40-
meta, err := localFetchMetadata(db, true)
50+
var meta metaData
51+
meta, err = localFetchMetadata(db, true)
4152
if err != nil {
4253
return err
4354
}

cmd/pull.go

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,21 @@ func init() {
4040

4141
func pull(args []string) error {
4242
// Ensure a database file was given
43+
var db, defDB string
44+
var err error
4345
if len(args) == 0 {
44-
return errors.New("No database file specified")
46+
db, err = getDefaultDatabase()
47+
if err != nil {
48+
return err
49+
}
50+
if db == "" {
51+
// No database name was given on the command line, and we don't have a default database selected
52+
return errors.New("No database file specified")
53+
}
54+
} else {
55+
db = args[0]
4556
}
57+
4658
// TODO: Allow giving multiple database files on the command line. Hopefully just needs turning this
4759
// TODO into a for loop
4860
if len(args) > 1 {
@@ -59,23 +71,24 @@ func pull(args []string) error {
5971

6072
// Retrieve metadata for the database
6173
var meta metaData
62-
var err error
63-
db := args[0]
6474
meta, err = updateMetadata(db, false) // Don't store the metadata to disk yet, in case the download fails
6575
if err != nil {
6676
return err
6777
}
6878

69-
// Unless --force is specified, check whether the file has changed since the last commit, and let the user know
70-
if *pullForce == false {
71-
changed, err := dbChanged(db, meta)
72-
if err != nil {
73-
return err
74-
}
75-
if changed {
76-
_, err = fmt.Fprintf(fOut, "%s has been changed since the last commit. Use --force if you "+
77-
"really want to overwrite it\n", db)
78-
return err
79+
// If the database file already exists locally, check whether the file has changed since the last commit, and let
80+
// the user know. The --force option on the command line overrides this
81+
if _, err = os.Stat(db); err == nil {
82+
if *pullForce == false {
83+
changed, err := dbChanged(db, meta)
84+
if err != nil {
85+
return err
86+
}
87+
if changed {
88+
_, err = fmt.Fprintf(fOut, "%s has been changed since the last commit. Use --force if you "+
89+
"really want to overwrite it\n", db)
90+
return err
91+
}
7992
}
8093
}
8194

@@ -182,6 +195,18 @@ func pull(args []string) error {
182195
if err != nil {
183196
return err
184197
}
198+
199+
// If a default database isn't already selected, we use this one as the default
200+
defDB, err = getDefaultDatabase()
201+
if err != nil {
202+
return err
203+
}
204+
if defDB == "" {
205+
err = saveDefaultDatabase(db)
206+
if err != nil {
207+
return err
208+
}
209+
}
185210
return nil
186211
}
187212
}
@@ -254,6 +279,18 @@ func pull(args []string) error {
254279
return err
255280
}
256281

282+
// If a default database isn't already selected, we use this one as the default
283+
defDB, err = getDefaultDatabase()
284+
if err != nil {
285+
return err
286+
}
287+
if defDB == "" {
288+
err = saveDefaultDatabase(db)
289+
if err != nil {
290+
return err
291+
}
292+
}
293+
257294
// Display success message to the user
258295
comID := resp.Header.Get("Commit-Id")
259296
_, err = fmt.Fprintln(fOut, "Downloaded complete")

0 commit comments

Comments
 (0)