github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/libfs/unstage_file.go (about) 1 // Copyright 2016 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 package libfs 6 7 import ( 8 "bytes" 9 10 "github.com/keybase/client/go/kbfs/data" 11 "github.com/keybase/client/go/kbfs/libkbfs" 12 "github.com/keybase/client/go/logger" 13 "golang.org/x/net/context" 14 ) 15 16 // UnstageForTesting unstages all unmerged commits and fast-forwards 17 // to the current master, if the given data is non-empty. If the given 18 // data is empty, it does nothing. 19 // 20 // This should only be needed if there is a bug in automatic conflict 21 // resolution. 22 // 23 // If the given data begins with the bytes "async", the unstaging is 24 // done asynchronously, i.e. this function returns immediately and the 25 // unstaging happens in the background. (Other subsequent IO 26 // operations may be blocked, though.) You can figure out when the 27 // unstage succeeds by consulting .kbfs_status. 28 func UnstageForTesting(ctx context.Context, log logger.Logger, 29 config libkbfs.Config, fb data.FolderBranch, 30 data []byte) (int, error) { 31 log.CDebugf(ctx, "UnstageForTesting(%v, %v)", fb, data) 32 if len(data) == 0 { 33 return 0, nil 34 } 35 36 if bytes.HasPrefix(data, []byte("async")) { 37 go func() { 38 ctx := context.Background() 39 err := config.KBFSOps().UnstageForTesting(ctx, fb) 40 if err != nil { 41 log.Warning("Async UnstageForTesting error: %v", err) 42 } 43 }() 44 } else { 45 err := config.KBFSOps().UnstageForTesting(ctx, fb) 46 if err != nil { 47 return 0, err 48 } 49 } 50 return len(data), nil 51 }