首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅使用Makefile更新包版本

仅使用Makefile更新包版本
EN

Code Review用户
提问于 2018-06-07 15:41:44
回答 1查看 1.5K关注 0票数 7

因此,我已经编写了一个Makefile,它的release函数可以像:make release bump=patch那样运行,并且我希望它在Makefile中完全可执行。我当前实现的唯一问题是存在大量冗余和长行命令,我认为这可以简化很多,尽管我还没有找到更好的解决方案(主要是因为增量)。然后,它标记并推挤。

所需的功能是能够传递补丁程序,次要的,主要的,并让它用新版本覆盖当前文件,提交该文件并推送新标记。

它只是有那种“恶心”的感觉,这是我努力避免的。

我当前的makefile看起来如下:

代码语言:javascript
复制
release:
    $(eval v := $(shell git describe --tags --abbrev=0 | sed -E -e 's/^v//' -e 's/(.*)-.*/\1/'))
ifeq ($(bump),patch)
    @echo "$v" | grep -Eo '[0-9]+$' | tail -n 1 | awk '{print $1 + 1}' | xargs -I '{}' sed -i '' -E 's/([0-9]+"$)/{}"/' ._version_.py
else ifeq ($(bump),minor)
    @echo "$v" | grep -Eo '(\.[0-9]+\.)' | awk '{print $1 + 1}' | xargs -I{} sed -i '' -E 's/(\.[0-9]+\.)/.{}./' ._version_.py
else ifeq ($(bump),major)
	@echo "$v" | grep -Eo '([0-9]+)' | head -n 1 | awk '{print $1 + 1}' | xargs -I{} sed -i '' -E 's/([0-9]+)/{}/' ._version_.py
endif
    $(eval a := $(shell grep -Eo '([0-9]+\.[0-9]+\.[0-9]+)' ._version_.py))
    @git tag "$a"
    @git commit -am "Bumped to version $a"
    @git push --tags
EN

回答 1

Code Review用户

发布于 2018-06-07 18:14:42

我认为有更简单的方法来完成这件事:

  1. 从标记中提取半衰期部分(就像您已经做的那样)
  2. 使用条件来确定要递增的字段
  3. 使用单个Awk来增加所选字段

例如:

代码语言:javascript
复制
release:
    $(eval v := $(shell git describe --tags --abbrev=0 | sed -Ee 's/^v|-.*//'))
ifeq ($(bump), major)
    $(eval f := 1)
else ifeq ($(bump), minor)
    $(eval f := 2)
else
    $(eval f := 3)
endif
    @echo $(v) | awk -F. -v OFS=. -v f=$(f) '{ $f++ } 1'

我会添加一些验证,以防版本没有主要的、次要的补丁组件。

票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/196047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档