• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / cli / 3572813994

04 Dec 2022 06:36PM UTC coverage: 54.923% (-2.8%) from 57.76%
3572813994

Pull #648

github

Kevin Saliou
chore: remove all tabs & trailing spaces from SQL files
Pull Request #648: chore: remove all tabs & trailing spaces from SQL files

3057 of 5566 relevant lines covered (54.92%)

498.14 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.61
/internal/db/branch/switch_/switch_.go
1
package switch_
2

3
import (
4
        "context"
5
        "errors"
6
        "fmt"
7
        "os"
8
        "path/filepath"
9

10
        "github.com/jackc/pgx/v4"
11
        "github.com/spf13/afero"
12
        "github.com/supabase/cli/internal/db/lint"
13
        "github.com/supabase/cli/internal/db/reset"
14
        "github.com/supabase/cli/internal/utils"
15
)
16

17
func Run(ctx context.Context, target string, fsys afero.Fs, options ...func(*pgx.ConnConfig)) error {
9✔
18
        // 1. Sanity checks
9✔
19
        {
18✔
20
                if err := utils.AssertSupabaseCliIsSetUpFS(fsys); err != nil {
10✔
21
                        return err
1✔
22
                }
1✔
23
                if err := utils.LoadConfigFS(fsys); err != nil {
9✔
24
                        return err
1✔
25
                }
1✔
26
                if err := utils.AssertSupabaseDbIsRunning(); err != nil {
8✔
27
                        return err
1✔
28
                }
1✔
29
                if target != "main" && utils.IsBranchNameReserved(target) {
7✔
30
                        return errors.New("Cannot switch branch " + utils.Aqua(target) + ": branch name is reserved.")
1✔
31
                }
1✔
32
                branchPath := filepath.Join(filepath.Dir(utils.CurrBranchPath), target)
5✔
33
                if _, err := fsys.Stat(branchPath); errors.Is(err, os.ErrNotExist) {
6✔
34
                        return errors.New("Branch " + utils.Aqua(target) + " does not exist.")
1✔
35
                } else if err != nil {
5✔
36
                        return err
×
37
                }
×
38
        }
39

40
        // 2. Check current branch
41
        currBranch, err := utils.GetCurrentBranchFS(fsys)
4✔
42
        if err != nil {
7✔
43
                // Assume we are on main branch
3✔
44
                currBranch = "main"
3✔
45
        }
3✔
46

47
        // 3. Switch Postgres database
48
        if currBranch == target {
6✔
49
                fmt.Println("Already on branch " + utils.Aqua(target) + ".")
2✔
50
        } else if err := switchDatabase(ctx, currBranch, target, options...); err != nil {
5✔
51
                return errors.New("Error switching to branch " + utils.Aqua(target) + ": " + err.Error())
1✔
52
        } else {
2✔
53
                fmt.Println("Switched to branch " + utils.Aqua(target) + ".")
1✔
54
        }
1✔
55

56
        // 4. Update current branch
57
        if err := afero.WriteFile(fsys, utils.CurrBranchPath, []byte(target), 0644); err != nil {
4✔
58
                return errors.New("Unable to update local branch file. Fix by running: echo '" + target + "' > " + utils.CurrBranchPath)
1✔
59
        }
1✔
60
        return nil
2✔
61
}
62

63
func switchDatabase(ctx context.Context, source, target string, options ...func(*pgx.ConnConfig)) error {
6✔
64
        conn, err := lint.ConnectLocalPostgres(ctx, "localhost", utils.Config.Db.Port, "template1", options...)
6✔
65
        if err != nil {
7✔
66
                return err
1✔
67
        }
1✔
68
        defer conn.Close(context.Background())
5✔
69
        if err := reset.DisconnectClients(ctx, conn); err != nil {
7✔
70
                return err
2✔
71
        }
2✔
72
        defer reset.RestartDatabase(context.Background())
3✔
73
        backup := "ALTER DATABASE postgres RENAME TO " + source + ";"
3✔
74
        if _, err := conn.Exec(ctx, backup); err != nil {
4✔
75
                return err
1✔
76
        }
1✔
77
        rename := "ALTER DATABASE " + target + " RENAME TO postgres;"
2✔
78
        if _, err := conn.Exec(ctx, rename); err != nil {
3✔
79
                rollback := "ALTER DATABASE " + source + " RENAME TO postgres;"
1✔
80
                if _, err := conn.Exec(ctx, rollback); err != nil {
2✔
81
                        fmt.Fprintln(os.Stderr, "Failed to rollback database:", err)
1✔
82
                }
1✔
83
                return err
1✔
84
        }
85
        return nil
1✔
86
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc