add an option alias -O for the old obi format

This commit is contained in:
2022-02-24 07:26:55 +01:00
parent f5b278f5ec
commit f18cc034bb
5 changed files with 44 additions and 93 deletions

131
Makefile
View File

@ -1,106 +1,53 @@
MODULE = $(shell env GO111MODULE=on $(GO) list -m) GOCMD=go
DATE ?= $(shell date +%FT%T%z) GOBUILD=$(GOCMD) build
VERSION ?= $(shell git describe --tags --always --dirty --match=v* 2> /dev/null || \ GOCLEAN=$(GOCMD) clean
cat $(CURDIR)/.version 2> /dev/null || echo v0) GOTEST=$(GOCMD) test
PKGS = $(or $(PKG),$(shell env GO111MODULE=on $(GO) list ./...)) GOGET=$(GOCMD) get
TESTPKGS = $(shell env GO111MODULE=on $(GO) list -f \
'{{ if or .TestGoFiles .XTestGoFiles }}{{ .ImportPath }}{{ end }}' \
$(PKGS))
BIN = $(CURDIR)/bin
GO = go BUILD_DIR=build
TIMEOUT = 15 OBITOOLS_PREFIX:=g
V = 0
Q = $(if $(filter 1,$V),,@)
M = $(shell printf "\033[34;1m▶\033[0m")
export GO111MODULE=on PACKAGES_SRC:= $(wildcard pkg/*/*.go pkg/*/*/*.go)
PACKAGE_DIRS:=$(sort $(patsubst %/,%,$(dir $(PACKAGES_SRC))))
PACKAGES:=$(notdir $(PACKAGE_DIRS))
OBITOOLS_SRC:= $(wildcard cmd/obitools/*/*.go)
OBITOOLS_DIRS:=$(sort $(patsubst %/,%,$(dir $(OBITOOLS_SRC))))
OBITOOLS:=$(notdir $(OBITOOLS_DIRS))
.PHONY: all .PHONY: all
all: fmt lint | $(BIN) ; $(info $(M) building executable) @ ## Build program binary
$Q $(GO) build \
-tags release \
-ldflags '-X $(MODULE)/cmd.Version=$(VERSION) -X $(MODULE)/cmd.BuildDate=$(DATE)' \
-o $(BIN)/$(basename $(MODULE)) main.go
# Tools define MAKE_PKG_RULE
pkg-$(notdir $(1)): $(1)
@echo -n - Building package $(notdir $(1))...
@$(GOBUILD) ./$(1) \
2> pkg-$(notdir $(1)).log \
|| cat pkg-$(notdir $(1)).log
@rm -f pkg-$(notdir $(1)).log
@echo Done.
endef
$(BIN): define MAKE_OBITOOLS_RULE
@mkdir -p $@ $(OBITOOLS_PREFIX)$(notdir $(1)): $(BUILD_DIR) $(1)
$(BIN)/%: | $(BIN) ; $(info $(M) building $(PACKAGE)) @echo -n - Building obitool $(notdir $(1))...
$Q tmp=$$(mktemp -d); \ @$(GOBUILD) -o $(BUILD_DIR)/$(OBITOOLS_PREFIX)$(notdir $(1)) ./$(1) \
env GO111MODULE=off GOPATH=$$tmp GOBIN=$(BIN) $(GO) get $(PACKAGE) \ 2> $(OBITOOLS_PREFIX)$(notdir $(1)).log \
|| ret=$$?; \ || cat $(OBITOOLS_PREFIX)$(notdir $(1)).log
rm -rf $$tmp ; exit $$ret @rm -f $(OBITOOLS_PREFIX)$(notdir $(1)).log
@echo Done.
endef
GOLINT = $(BIN)/golint
$(BIN)/golint: PACKAGE=golang.org/x/lint/golint
GOCOV = $(BIN)/gocov all: obitools
$(BIN)/gocov: PACKAGE=github.com/axw/gocov/...
GOCOVXML = $(BIN)/gocov-xml packages: $(patsubst %,pkg-%,$(PACKAGES))
$(BIN)/gocov-xml: PACKAGE=github.com/AlekSi/gocov-xml obitools: $(patsubst %,$(OBITOOLS_PREFIX)%,$(OBITOOLS))
GO2XUNIT = $(BIN)/go2xunit $(BUILD_DIR):
$(BIN)/go2xunit: PACKAGE=github.com/tebeka/go2xunit mkdir -p $@
# Tests
TEST_TARGETS := test-default test-bench test-short test-verbose test-race $(foreach P,$(PACKAGE_DIRS),$(eval $(call MAKE_PKG_RULE,$(P))))
.PHONY: $(TEST_TARGETS) test-xml check test tests
test-bench: ARGS=-run=__absolutelynothing__ -bench=. ## Run benchmarks
test-short: ARGS=-short ## Run only short tests
test-verbose: ARGS=-v ## Run tests in verbose mode with coverage reporting
test-race: ARGS=-race ## Run tests with race detector
$(TEST_TARGETS): NAME=$(MAKECMDGOALS:test-%=%)
$(TEST_TARGETS): test
check test tests: fmt lint ; $(info $(M) running $(NAME:%=% )tests) @ ## Run tests
$Q $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS)
test-xml: fmt lint | $(GO2XUNIT) ; $(info $(M) running xUnit tests) @ ## Run tests with xUnit output $(foreach P,$(OBITOOLS_DIRS),$(eval $(call MAKE_OBITOOLS_RULE,$(P))))
$Q mkdir -p test
$Q 2>&1 $(GO) test -timeout $(TIMEOUT)s -v $(TESTPKGS) | tee test/tests.output
$(GO2XUNIT) -fail -input test/tests.output -output test/tests.xml
COVERAGE_MODE = atomic
COVERAGE_PROFILE = $(COVERAGE_DIR)/profile.out
COVERAGE_XML = $(COVERAGE_DIR)/coverage.xml
COVERAGE_HTML = $(COVERAGE_DIR)/index.html
.PHONY: test-coverage test-coverage-tools
test-coverage-tools: | $(GOCOV) $(GOCOVXML)
test-coverage: COVERAGE_DIR := $(CURDIR)/test/coverage.$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
test-coverage: fmt lint test-coverage-tools ; $(info $(M) running coverage tests) @ ## Run coverage tests
$Q mkdir -p $(COVERAGE_DIR)
$Q $(GO) test \
-coverpkg=$$($(GO) list -f '{{ join .Deps "\n" }}' $(TESTPKGS) | \
grep '^$(MODULE)/' | \
tr '\n' ',' | sed 's/,$$//') \
-covermode=$(COVERAGE_MODE) \
-coverprofile="$(COVERAGE_PROFILE)" $(TESTPKGS)
$Q $(GO) tool cover -html=$(COVERAGE_PROFILE) -o $(COVERAGE_HTML)
$Q $(GOCOV) convert $(COVERAGE_PROFILE) | $(GOCOVXML) > $(COVERAGE_XML)
.PHONY: lint
lint: | $(GOLINT) ; $(info $(M) running golint) @ ## Run golint
$Q $(GOLINT) -set_exit_status $(PKGS)
.PHONY: fmt
fmt: ; $(info $(M) running gofmt) @ ## Run gofmt on all source files
$Q $(GO) fmt $(PKGS)
# Misc
.PHONY: clean
clean: ; $(info $(M) cleaning) @ ## Cleanup everything
@rm -rf $(BIN)
@rm -rf test/tests.* test/coverage.*
.PHONY: help
help:
@grep -hE '^[ a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-17s\033[0m %s\n", $$1, $$2}'
.PHONY: version
version:
@echo $(VERSION)

1
go.mod
View File

@ -4,6 +4,7 @@ go 1.17
require ( require (
github.com/DavidGamba/go-getoptions v0.25.3 github.com/DavidGamba/go-getoptions v0.25.3
github.com/PaesslerAG/gval v1.1.2
github.com/goccy/go-json v0.9.4 github.com/goccy/go-json v0.9.4
github.com/schollz/progressbar/v3 v3.8.6 github.com/schollz/progressbar/v3 v3.8.6
github.com/tevino/abool/v2 v2.0.1 github.com/tevino/abool/v2 v2.0.1

3
go.sum
View File

@ -1,5 +1,8 @@
github.com/DavidGamba/go-getoptions v0.25.3 h1:lSPcMkwWvVZU05C+Uz4DKnKN5wz4bcD1QvJ/QHCRexo= github.com/DavidGamba/go-getoptions v0.25.3 h1:lSPcMkwWvVZU05C+Uz4DKnKN5wz4bcD1QvJ/QHCRexo=
github.com/DavidGamba/go-getoptions v0.25.3/go.mod h1:qLaLSYeQ8sUVOfKuu5JT5qKKS3OCwyhkYSJnoG+ggmo= github.com/DavidGamba/go-getoptions v0.25.3/go.mod h1:qLaLSYeQ8sUVOfKuu5JT5qKKS3OCwyhkYSJnoG+ggmo=
github.com/PaesslerAG/gval v1.1.2 h1:EROKxV4/fAKWb0Qoj7NOxmHZA7gcpjOV9XgiRZMRCUU=
github.com/PaesslerAG/gval v1.1.2/go.mod h1:Fa8gfkCmUsELXgayr8sfL/sw+VzCVoa03dcOcR/if2w=
github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@ -54,6 +54,7 @@ func OutputOptionSet(options *getoptions.GetOpt) {
options.BoolVar(&__output_fastjson_format__, "output-json-header", false, options.BoolVar(&__output_fastjson_format__, "output-json-header", false,
options.Description("output FASTA/FASTQ title line annotations follow json format.")) options.Description("output FASTA/FASTQ title line annotations follow json format."))
options.BoolVar(&__output_fastobi_format__, "output-OBI-header", false, options.BoolVar(&__output_fastobi_format__, "output-OBI-header", false,
options.Alias("O"),
options.Description("output FASTA/FASTQ title line annotations follow OBI format.")) options.Description("output FASTA/FASTQ title line annotations follow OBI format."))
options.BoolVar(&__output_solexa_quality__, "solexa-output", false, options.BoolVar(&__output_solexa_quality__, "solexa-output", false,

View File

@ -29,7 +29,6 @@ func PairingOptionSet(options *getoptions.GetOpt) {
options.Alias("D"), options.Alias("D"),
options.Description("Length added to the fast detected overlap for the precise alignement")) options.Description("Length added to the fast detected overlap for the precise alignement"))
options.IntVar(&_MinOverlap, "min-overlap", _MinOverlap, options.IntVar(&_MinOverlap, "min-overlap", _MinOverlap,
options.Alias("O"),
options.Description("Minimum ovelap between both the reads to consider the aligment")) options.Description("Minimum ovelap between both the reads to consider the aligment"))
options.Float64Var(&_MinIdentity, "min-identity", _MinIdentity, options.Float64Var(&_MinIdentity, "min-identity", _MinIdentity,
options.Alias("X"), options.Alias("X"),