Revert "feat(opencode): рабочий serve для dev стартует из папки репозитория; пул покрывает внешним сервером подкаталоги"
This reverts commit 2005421739.
This commit is contained in:
@@ -34,12 +34,6 @@ type Pool struct {
|
||||
segs map[string]*Server // dir → сервер (root тоже здесь)
|
||||
used map[int]bool // занятые порты
|
||||
next int // следующий кандидат порта
|
||||
|
||||
// externs — внешние (уже запущенные) серверы, зарегистрированные как
|
||||
// префикс каталога: Ensure(dir) отдаёт такой сервер и для подкаталогов
|
||||
// зарегистрированного каталога (используется тестами для эмуляции serve,
|
||||
// покрывающего всё дерево worktree).
|
||||
externs map[string]*Server // dir → внешний сервер
|
||||
}
|
||||
|
||||
// NewPool создаёт пул. rootDir помечен как служебный (не снимается ReleaseTask).
|
||||
@@ -98,18 +92,11 @@ func (p *Pool) EnsureRoot(ctx context.Context) error {
|
||||
// Возвращает сервер; root-сервер для rootDir возвращается как есть.
|
||||
func (p *Pool) Ensure(ctx context.Context, dir string) (*Server, error) {
|
||||
p.mu.Lock()
|
||||
if s, ok := p.segs[dir]; ok {
|
||||
p.mu.Unlock()
|
||||
return s, nil
|
||||
}
|
||||
abs := filepath.Clean(dir)
|
||||
if s, ok := p.segs[abs]; ok {
|
||||
p.mu.Unlock()
|
||||
return s, nil
|
||||
}
|
||||
// Внешний сервер-префикс покрывает дерево каталога (тестовая эмуляция):
|
||||
// подкаталог обслуживается тем же сервером, spawn не нужен.
|
||||
if s := p.externalFor(abs); s != nil {
|
||||
p.segs[abs] = s
|
||||
p.mu.Unlock()
|
||||
return s, nil
|
||||
}
|
||||
s := &Server{
|
||||
Bin: p.Bin,
|
||||
DBPath: p.DBPath,
|
||||
@@ -142,31 +129,9 @@ func (p *Pool) RegisterExternal(dir, url string) {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
abs := filepath.Clean(dir)
|
||||
s := &Server{URL: url, Host: p.Host, PollInterval: 0}
|
||||
p.segs[abs] = s
|
||||
if p.externs == nil {
|
||||
p.externs = map[string]*Server{}
|
||||
}
|
||||
p.externs[abs] = s
|
||||
p.segs[abs] = &Server{URL: url, Host: p.Host, PollInterval: 0}
|
||||
if p.rootDir != "" && abs == p.rootDir {
|
||||
p.root = s
|
||||
}
|
||||
}
|
||||
|
||||
// externalFor возвращает внешний сервер-префикс для dir: самого каталога или
|
||||
// его родителя (подкаталоги зарегистрированного каталога обслуживаются тем же
|
||||
// внешним сервером). Вызывается под блокировкой p.mu.
|
||||
func (p *Pool) externalFor(dir string) *Server {
|
||||
cur := dir
|
||||
for {
|
||||
if s, ok := p.externs[cur]; ok {
|
||||
return s
|
||||
}
|
||||
parent := filepath.Dir(cur)
|
||||
if parent == cur {
|
||||
return nil
|
||||
}
|
||||
cur = parent
|
||||
p.root = p.segs[abs]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user