1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-26 09:25:23 +00:00

Merge pull request #260 from Loyalsoldier/refine-errorgen

Errorgen: support to run outside of GOPATH
This commit is contained in:
Loyalsoldier 2020-10-04 13:15:05 +08:00 committed by GitHub
commit 9a452bc1a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
63 changed files with 111 additions and 98 deletions

View File

@ -2,7 +2,7 @@
package commander
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package dispatcher
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,4 +2,4 @@
package dispatcher
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,4 +1,4 @@
// Package dns is an implementation of core.DNS feature.
package dns
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -2,7 +2,7 @@
package dns
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package command
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package log
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -1,4 +1,4 @@
// Package policy is an implementation of policy.Manager feature.
package policy
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,3 +1,3 @@
package command
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,6 +1,6 @@
package inbound
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -1,6 +1,6 @@
package outbound
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package reverse
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package command
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package router
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package command
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package stats
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -1,4 +1,4 @@
// Package buf provides a light-weight memory allocation mechanism.
package buf // import "v2ray.com/core/common/buf"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -13,7 +13,7 @@ import (
"v2ray.com/core/common/errors"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
var (
// ErrNoClue is for the situation that existing information is not enough to make a decision. For example, Router may return this error when there is no suitable route.
@ -126,25 +126,33 @@ func GetGOPATH() string {
// GetModuleName returns the value of module in `go.mod` file.
func GetModuleName(pathToProjectRoot string) (string, error) {
gomodPath := filepath.Join(pathToProjectRoot, "go.mod")
gomodBytes, err := ioutil.ReadFile(gomodPath)
if err != nil {
return "", err
}
gomodContent := string(gomodBytes)
moduleIdx := strings.Index(gomodContent, "module ")
newLineIdx := strings.Index(gomodContent, "\n")
var moduleName string
if moduleIdx >= 0 {
if newLineIdx >= 0 {
moduleName = strings.TrimSpace(gomodContent[moduleIdx+6 : newLineIdx])
moduleName = strings.TrimSuffix(moduleName, "\r")
} else {
moduleName = strings.TrimSpace(gomodContent[moduleIdx+6:])
loopPath := pathToProjectRoot
for {
if idx := strings.LastIndex(loopPath, string(filepath.Separator)); idx >= 0 {
gomodPath := filepath.Join(loopPath, "go.mod")
gomodBytes, err := ioutil.ReadFile(gomodPath)
if err != nil {
loopPath = loopPath[:idx]
continue
}
gomodContent := string(gomodBytes)
moduleIdx := strings.Index(gomodContent, "module ")
newLineIdx := strings.Index(gomodContent, "\n")
if moduleIdx >= 0 {
if newLineIdx >= 0 {
moduleName = strings.TrimSpace(gomodContent[moduleIdx+6 : newLineIdx])
moduleName = strings.TrimSuffix(moduleName, "\r")
} else {
moduleName = strings.TrimSpace(gomodContent[moduleIdx+6:])
}
return moduleName, nil
}
return "", fmt.Errorf("can not get module path in `%s`", gomodPath)
}
} else {
return "", fmt.Errorf("can not get module path in `%s`", gomodPath)
break
}
return moduleName, nil
return moduleName, fmt.Errorf("no `go.mod` file in every parent directory of `%s`", pathToProjectRoot)
}

View File

@ -1,4 +1,4 @@
// Package crypto provides common crypto libraries for V2Ray.
package crypto // import "v2ray.com/core/common/crypto"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -5,35 +5,41 @@ import (
"log"
"os"
"path/filepath"
"v2ray.com/core/common"
)
func getCurrentPkg() (string, error) {
path, err := os.Getwd()
if err != nil {
return "", err
}
return filepath.Base(path), nil
}
func main() {
pkg, err := getCurrentPkg()
pwd, err := os.Getwd()
if err != nil {
log.Fatal("Failed to get current package: ", err.Error())
return
fmt.Println("can not get current working directory")
os.Exit(1)
}
pkg := filepath.Base(pwd)
if pkg == "v2ray-core" {
pkg = "core"
}
moduleName, gmnErr := common.GetModuleName(pwd)
if gmnErr != nil {
fmt.Println("can not get module path", gmnErr)
os.Exit(1)
}
file, err := os.OpenFile("errors.generated.go", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err != nil {
log.Fatalf("Failed to generate errors.generated.go: %v", err)
return
os.Exit(1)
}
defer file.Close()
fmt.Fprintln(file, "package", pkg)
fmt.Fprintln(file, "")
fmt.Fprintln(file, "import \"v2ray.com/core/common/errors\"")
fmt.Fprintln(file, "import \""+moduleName+"/common/errors\"")
fmt.Fprintln(file, "")
fmt.Fprintln(file, "type errPathObjHolder struct {}")
fmt.Fprintln(file, "func newError(values ...interface{}) *errors.Error { return errors.New(values...).WithPathObj(errPathObjHolder{}) }")
file.Close()
fmt.Fprintln(file, "type errPathObjHolder struct{}")
fmt.Fprintln(file, "")
fmt.Fprintln(file, "func newError(values ...interface{}) *errors.Error {")
fmt.Fprintln(file, " return errors.New(values...).WithPathObj(errPathObjHolder{})")
fmt.Fprintln(file, "}")
}

View File

@ -1,3 +1,3 @@
package mux
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,4 +1,4 @@
// Package net is a drop-in replacement to Golang's net package, with some more functionalities.
package net // import "v2ray.com/core/common/net"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -10,7 +10,7 @@ import (
"v2ray.com/core/common/platform"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
func Run(args []string, input io.Reader) (buf.MultiBuffer, error) {
v2ctl := platform.GetToolLocation("v2ctl")

View File

@ -1,3 +1,3 @@
package protocol // import "v2ray.com/core/common/protocol"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -15,7 +15,7 @@ import (
"v2ray.com/core/common"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
type Certificate struct {
// Cerificate in ASN.1 DER format

View File

@ -1,6 +1,6 @@
package retry // import "v2ray.com/core/common/retry"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"time"

View File

@ -9,8 +9,7 @@
// connections.
package core
//go:generate go install "v2ray.com/core/common/errors/errorgen"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"runtime"

View File

@ -2,7 +2,7 @@ package features
import "v2ray.com/core/common"
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
// Feature is the interface for V2Ray features. All features must implement this interface.
// All existing features have an implementation in app directory. These features can be replaced by third-party ones.

View File

@ -1,6 +1,6 @@
package dns
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"v2ray.com/core/common/net"

View File

@ -1,6 +1,6 @@
package stats
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -1,6 +1,6 @@
package command
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"os"

View File

@ -1,3 +1,3 @@
package conf
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,3 +1,3 @@
package serial
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,3 +1,3 @@
package control
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,6 +1,6 @@
package external
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"bytes"

View File

@ -1,6 +1,6 @@
package json
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"io"

View File

@ -1,6 +1,6 @@
package main
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"flag"

View File

@ -4,7 +4,7 @@
package blackhole
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package dokodemo
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package freedom
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -1,3 +1,3 @@
package http
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,3 +1,3 @@
package mtproto
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -5,4 +5,4 @@
// R.I.P Shadowsocks
package shadowsocks
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,4 +1,4 @@
// Package socks provides implements of Socks protocol 4, 4a and 5.
package socks
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -2,7 +2,7 @@
package encoding
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"io"

View File

@ -2,7 +2,7 @@
package inbound
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package outbound
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -5,7 +5,7 @@
// clients with 'socks' for proxying.
package vless
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
const (
XRO = "xtls-rprx-origin"

View File

@ -5,7 +5,7 @@ import (
"v2ray.com/core/common/protocol"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
const (
Version = byte(1)

View File

@ -2,7 +2,7 @@
package inbound
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -2,7 +2,7 @@
package outbound
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"context"

View File

@ -5,4 +5,4 @@
// clients with 'socks' for proxying.
package vmess
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,3 +1,3 @@
package domainsocket
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,6 +1,6 @@
package http
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
import (
"bufio"

View File

@ -1,3 +1,3 @@
package http
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -1,3 +1,3 @@
package internet
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -5,4 +5,4 @@
// xtaci@github for translating to Golang
package kcp
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -7,7 +7,7 @@ import (
"v2ray.com/core/transport/internet"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
// Here is some modification needs to be done before update quic vendor.
// * use bytespool in buffer_pool.go

View File

@ -1,3 +1,3 @@
package tcp
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -9,7 +9,7 @@ import (
"v2ray.com/core/common/net"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
var (
_ buf.Writer = (*Conn)(nil)

View File

@ -1,5 +1,5 @@
package udp
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
const protocolName = "udp"

View File

@ -4,4 +4,4 @@ Websocket transport implements an HTTP(S) compliable, surveillance proof transpo
*/
package websocket
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen

View File

@ -9,7 +9,7 @@ import (
"v2ray.com/core/common/net"
)
//go:generate errorgen
//go:generate go run v2ray.com/core/common/errors/errorgen
var (
_ buf.Writer = (*Conn)(nil)