From 7c3fa349c9d3fddd5af11a4612e6d609dc787f1e Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 26 Nov 2020 14:30:22 -0500 Subject: [PATCH] API: roll back disk mutations on panic --- api/graph/schema.resolvers.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/api/graph/schema.resolvers.go b/api/graph/schema.resolvers.go index ea735dd..ef990b7 100644 --- a/api/graph/schema.resolvers.go +++ b/api/graph/schema.resolvers.go @@ -81,6 +81,18 @@ func (r *mutationResolver) CreateRepository(ctx context.Context, name string, vi repoCreated bool repo model.Repository ) + defer func() { + if err := recover(); err != nil { + if repoCreated { + err := os.RemoveAll(repoPath) + if err != nil { + panic(err) + } + } + panic(err) + } + }() + if err := database.WithTx(ctx, nil, func(tx *sql.Tx) error { vismap := map[model.Visibility]string{ model.VisibilityPublic: "public", @@ -178,6 +190,17 @@ func (r *mutationResolver) UpdateRepository(ctx context.Context, id int, input m repoPath string moved bool ) + defer func() { + if err := recover(); err != nil { + if moved { + err := os.Rename(repoPath, origPath) + if err != nil { + panic(err) + } + } + panic(err) + } + }() if err := database.WithTx(ctx, nil, func(tx *sql.Tx) error { user := auth.ForContext(ctx) -- 2.38.4