Bläddra i källkod

Remove support for shared vars

Proactively remove support for shared vars per the discussions in issue
https://b.elv.sh/1222 and the IM channels. This feature is not used
by Elvish itself and is not believed to be used by any Elvish users.
Removing this (presumptively) unused feature makes it simpler to replace
the existing BoltDB store of interactive command/location history with a
simpler flat file implementation (such as used by Bash and Fish). Also,
eliminating shared var support makes it explicit that solving issue #1222
doesn't need to deal with that feature.

Related #1222
Kurtis Rader 1 år sedan
förälder
incheckning
abf1fc5bd3

+ 2 - 0
0.19.0-release-notes.md

@@ -9,6 +9,8 @@ This is the draft release notes for 0.19.0, scheduled to be released around
 -   Symbolic links are now always treated as ordinary files by the global
     modifiers `type:dir` and `type:regular` in wildcard expansions.
 
+-   Support for shared vars has been removed; e.g., `store:shared-var`.
+
 # Deprecated features
 
 Deprecated features will be removed in 0.20.0.

+ 0 - 19
pkg/daemon/client.go

@@ -168,22 +168,3 @@ func (c *client) Dirs(blacklist map[string]struct{}) ([]storedefs.Dir, error) {
 	err := c.call("Dirs", req, res)
 	return res.Dirs, err
 }
-
-func (c *client) SharedVar(name string) (string, error) {
-	req := &api.SharedVarRequest{Name: name}
-	res := &api.SharedVarResponse{}
-	err := c.call("SharedVar", req, res)
-	return res.Value, err
-}
-
-func (c *client) SetSharedVar(name, value string) error {
-	req := &api.SetSharedVarRequest{Name: name, Value: value}
-	res := &api.SetSharedVarResponse{}
-	return c.call("SetSharedVar", req, res)
-}
-
-func (c *client) DelSharedVar(name string) error {
-	req := &api.DelSharedVarRequest{Name: name}
-	res := &api.DelSharedVarResponse{}
-	return c.call("DelSharedVar", req, res)
-}

+ 0 - 23
pkg/daemon/internal/api/api.go

@@ -117,26 +117,3 @@ type DirsRequest struct {
 type DirsResponse struct {
 	Dirs []storedefs.Dir
 }
-
-// SharedVar requests.
-
-type SharedVarRequest struct {
-	Name string
-}
-
-type SharedVarResponse struct {
-	Value string
-}
-
-type SetSharedVarRequest struct {
-	Name  string
-	Value string
-}
-
-type SetSharedVarResponse struct{}
-
-type DelSharedVarRequest struct {
-	Name string
-}
-
-type DelSharedVarResponse struct{}

+ 0 - 1
pkg/daemon/server_test.go

@@ -45,7 +45,6 @@ func TestProgram_ServesClientRequests(t *testing.T) {
 	// Test store requests.
 	storetest.TestCmd(t, client)
 	storetest.TestDir(t, client)
-	storetest.TestSharedVar(t, client)
 }
 
 func TestProgram_StillServesIfCannotOpenDB(t *testing.T) {

+ 0 - 23
pkg/daemon/service.go

@@ -112,26 +112,3 @@ func (s *service) Dirs(req *api.DirsRequest, res *api.DirsResponse) error {
 	res.Dirs = dirs
 	return err
 }
-
-func (s *service) SharedVar(req *api.SharedVarRequest, res *api.SharedVarResponse) error {
-	if s.err != nil {
-		return s.err
-	}
-	value, err := s.store.SharedVar(req.Name)
-	res.Value = value
-	return err
-}
-
-func (s *service) SetSharedVar(req *api.SetSharedVarRequest, res *api.SetSharedVarResponse) error {
-	if s.err != nil {
-		return s.err
-	}
-	return s.store.SetSharedVar(req.Name, req.Value)
-}
-
-func (s *service) DelSharedVar(req *api.DelSharedVarRequest, res *api.DelSharedVarResponse) error {
-	if s.err != nil {
-		return s.err
-	}
-	return s.store.DelSharedVar(req.Name)
-}

+ 0 - 30
pkg/mods/store/store.go

@@ -85,32 +85,6 @@ import (
 //
 // Each entry is represented by a pseudo-map with fields `path` and `score`.
 
-//elvdoc:fn shared-var
-//
-// ```elvish
-// store:shared-var $name
-// ```
-//
-// Outputs the value of the shared variable with the given name. Throws an error
-// if the shared variable doesn't exist.
-
-//elvdoc:fn set-shared-var
-//
-// ```elvish
-// store:set-shared-var $name $value
-// ```
-//
-// Sets the value of the shared variable with the given name, creating it if it
-// doesn't exist. The value must be a string.
-
-//elvdoc:fn del-shared-var
-//
-// ```elvish
-// store:del-shared-var $name
-// ```
-//
-// Deletes the shared variable with the given name.
-
 func Ns(s storedefs.Store) *eval.Ns {
 	return eval.BuildNsNamed("store").
 		AddGoFns(map[string]any{
@@ -125,9 +99,5 @@ func Ns(s storedefs.Store) *eval.Ns {
 			"add-dir": func(dir string) error { return s.AddDir(dir, 1) },
 			"del-dir": s.DelDir,
 			"dirs":    func() ([]storedefs.Dir, error) { return s.Dirs(storedefs.NoBlacklist) },
-
-			"shared-var":     s.SharedVar,
-			"set-shared-var": s.SetSharedVar,
-			"del-shared-var": s.DelSharedVar,
 		}).Ns()
 }

+ 0 - 10
pkg/mods/store/store_test.go

@@ -49,16 +49,6 @@ func TestStore(t *testing.T) {
 		That("store:del-dir /foo").DoesNothing(),
 		That("store:dirs").Puts(
 			dir("/bar", store.DirScoreIncrement)),
-
-		// Set shared variables
-		That("store:set-shared-var foo lorem").DoesNothing(),
-		That("store:set-shared-var bar ipsum").DoesNothing(),
-		// Query shared variables
-		That("store:shared-var foo").Puts("lorem"),
-		That("store:shared-var bar").Puts("ipsum"),
-		// Delete shared variables
-		That("store:del-shared-var foo").DoesNothing(),
-		That("store:shared-var foo").Throws(store.ErrNoSharedVar),
 	)
 }
 

+ 2 - 3
pkg/store/buckets.go

@@ -1,9 +1,8 @@
 package store
 
 const (
-	bucketCmd       = "cmd"
-	bucketDir       = "dir"
-	bucketSharedVar = "shared_var"
+	bucketCmd = "cmd"
+	bucketDir = "dir"
 )
 
 // The following buckets were used before and are thus reserved:

+ 0 - 48
pkg/store/shared_var.go

@@ -1,48 +0,0 @@
-package store
-
-import (
-	"errors"
-
-	bolt "go.etcd.io/bbolt"
-)
-
-// ErrNoSharedVar is returned by Store.SharedVar when there is no such variable.
-var ErrNoSharedVar = errors.New("no such shared variable")
-
-func init() {
-	initDB["initialize shared variable table"] = func(tx *bolt.Tx) error {
-		_, err := tx.CreateBucketIfNotExists([]byte(bucketSharedVar))
-		return err
-	}
-}
-
-// SharedVar gets the value of a shared variable.
-func (s *dbStore) SharedVar(n string) (string, error) {
-	var value string
-	err := s.db.View(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte(bucketSharedVar))
-		v := b.Get([]byte(n))
-		if v == nil {
-			return ErrNoSharedVar
-		}
-		value = string(v)
-		return nil
-	})
-	return value, err
-}
-
-// SetSharedVar sets the value of a shared variable.
-func (s *dbStore) SetSharedVar(n, v string) error {
-	return s.db.Update(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte(bucketSharedVar))
-		return b.Put([]byte(n), []byte(v))
-	})
-}
-
-// DelSharedVar deletes a shared variable.
-func (s *dbStore) DelSharedVar(n string) error {
-	return s.db.Update(func(tx *bolt.Tx) error {
-		b := tx.Bucket([]byte(bucketSharedVar))
-		return b.Delete([]byte(n))
-	})
-}

+ 0 - 12
pkg/store/shared_var_test.go

@@ -1,12 +0,0 @@
-package store_test
-
-import (
-	"testing"
-
-	"src.elv.sh/pkg/store"
-	"src.elv.sh/pkg/store/storetest"
-)
-
-func TestSharedVar(t *testing.T) {
-	storetest.TestSharedVar(t, store.MustTempStore(t))
-}

+ 0 - 4
pkg/store/storedefs/storedefs.go

@@ -26,10 +26,6 @@ type Store interface {
 	AddDir(dir string, incFactor float64) error
 	DelDir(dir string) error
 	Dirs(blacklist map[string]struct{}) ([]Dir, error)
-
-	SharedVar(name string) (string, error)
-	SetSharedVar(name, value string) error
-	DelSharedVar(name string) error
 }
 
 // Dir is an entry in the directory history.

+ 0 - 51
pkg/store/storetest/shared_var.go

@@ -1,51 +0,0 @@
-package storetest
-
-import (
-	"testing"
-
-	"src.elv.sh/pkg/store"
-	"src.elv.sh/pkg/store/storedefs"
-)
-
-// TestSharedVar tests the shared variable functionality of a Store.
-func TestSharedVar(t *testing.T, tStore storedefs.Store) {
-	varname := "foo"
-	value1 := "lorem ipsum"
-	value2 := "o mores, o tempora"
-
-	// Getting an nonexistent variable should return ErrNoSharedVar.
-	_, err := tStore.SharedVar(varname)
-	if !matchErr(err, store.ErrNoSharedVar) {
-		t.Error("want ErrNoSharedVar, got", err)
-	}
-
-	// Setting a variable for the first time creates it.
-	err = tStore.SetSharedVar(varname, value1)
-	if err != nil {
-		t.Error("want no error, got", err)
-	}
-	v, err := tStore.SharedVar(varname)
-	if v != value1 || err != nil {
-		t.Errorf("want %q and no error, got %q and %v", value1, v, err)
-	}
-
-	// Setting an existing variable updates its value.
-	err = tStore.SetSharedVar(varname, value2)
-	if err != nil {
-		t.Error("want no error, got", err)
-	}
-	v, err = tStore.SharedVar(varname)
-	if v != value2 || err != nil {
-		t.Errorf("want %q and no error, got %q and %v", value2, v, err)
-	}
-
-	// After deleting a variable, access to it cause ErrNoSharedVar.
-	err = tStore.DelSharedVar(varname)
-	if err != nil {
-		t.Error("want no error, got", err)
-	}
-	_, err = tStore.SharedVar(varname)
-	if !matchErr(err, store.ErrNoSharedVar) {
-		t.Error("want ErrNoSharedVar, got", err)
-	}
-}