forked from misaka00251/go2spec
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
540faa9f51 |
@@ -1,28 +0,0 @@
|
|||||||
BSD 3-Clause License
|
|
||||||
|
|
||||||
Copyright (c) 2026, Institute of Software, Chinese Academy of Sciences (ISCAS)
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
3. Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES, LOSS OF USE, DATA, OR PROFITS, OR BUSINESS INTERRUPTION HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
# go2spec
|
|
||||||
|
|
||||||
[](#overview)
|
|
||||||
[](LICENSE)
|
|
||||||
[](README.md)
|
|
||||||
[](README.zh.md)
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
go2spec is a Go package helper for the openRuyi RPM packaging workflow. It collects upstream metadata from the Go ecosystem, generates source archives, and writes RPM spec files.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Build From Source
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone <go2spec-repo-url>
|
|
||||||
cd go2spec
|
|
||||||
go build -o go2spec .
|
|
||||||
```
|
|
||||||
|
|
||||||
Run it with:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./go2spec help
|
|
||||||
```
|
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
### Generate a spec
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec pack golang.org/x/net
|
|
||||||
```
|
|
||||||
|
|
||||||
The command creates a file layout similar to this in the current directory:
|
|
||||||
|
|
||||||
```text
|
|
||||||
go-golang-x-net/
|
|
||||||
go-golang-x-net/go-golang-x-net.spec
|
|
||||||
go-golang-x-net_<version>.orig.tar.<gz|xz>
|
|
||||||
```
|
|
||||||
|
|
||||||
### Check existing spec updates without writing files
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -n /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
`update` scans `/path/to/SPECS/go-*/*.spec`, then checks the latest upstream version.
|
|
||||||
|
|
||||||
### Run updates concurrently
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -j 4 /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
> Always run dry run mode first before modifying real spec files.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
| Area | English | Chinese |
|
|
||||||
|---|---|---|
|
|
||||||
| Main README | [README.md](README.md) | [README.zh.md](docs/zh/README.zh.md) |
|
|
||||||
| `pack` command | [docs/en/pack.en.md](docs/en/pack.en.md) | [docs/zh/pack.zh.md](docs/zh/pack.zh.md) |
|
|
||||||
| `update` command | [docs/en/update.en.md](docs/en/update.en.md) | [docs/zh/update.zh.md](docs/zh/update.zh.md) |
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
- Read the [openRuyi Code of Conduct](https://openruyi.cn/governance/legal/code-of-conduct) and agree to follow it.
|
|
||||||
- Read the [AI-assisted Contribution Policy](https://openruyi.cn/governance/policy/ai-contribution-policy), and note that this Pull Request contains substantial AI-assisted content when applicable.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
go2spec uses the BSD-3-Clause license. See [LICENSE](LICENSE).
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
# go2spec
|
|
||||||
|
|
||||||
[](#项目概览)
|
|
||||||
[](LICENSE)
|
|
||||||
[](README.md)
|
|
||||||
[](README.zh.md)
|
|
||||||
|
|
||||||
## 项目概览
|
|
||||||
|
|
||||||
go2spec 是面向 openRuyi RPM 打包流程的 Go 包辅助工具。它从 Go 生态获取上游元数据,生成源码归档,并输出 RPM spec。
|
|
||||||
|
|
||||||
## 安装指南
|
|
||||||
|
|
||||||
### 从源码构建
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone <go2spec-repo-url>
|
|
||||||
cd go2spec
|
|
||||||
go build -o go2spec .
|
|
||||||
```
|
|
||||||
|
|
||||||
运行:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./go2spec help
|
|
||||||
```
|
|
||||||
|
|
||||||
## 快速开始
|
|
||||||
|
|
||||||
### 生成 spec
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec pack golang.org/x/net
|
|
||||||
```
|
|
||||||
|
|
||||||
该命令会在当前目录生成类似下面的文件结构:
|
|
||||||
|
|
||||||
```text
|
|
||||||
go-golang-x-net/
|
|
||||||
go-golang-x-net/go-golang-x-net.spec
|
|
||||||
go-golang-x-net_<version>.orig.tar.<gz|xz>
|
|
||||||
```
|
|
||||||
|
|
||||||
### 不写入文件地检查现有 spec 更新
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -n /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
`update` 会扫描 `/path/to/SPECS/go-*/*.spec`,然后检查上游最新版本。
|
|
||||||
|
|
||||||
### 并发执行更新
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -j 4 /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
> 建议始终先执行 dry run,再修改真实 spec 文件。
|
|
||||||
|
|
||||||
## 文档导航
|
|
||||||
|
|
||||||
| 内容 | English | 中文 |
|
|
||||||
|---|---|---|
|
|
||||||
| 主 README | [README.md](README.md) | [README.zh.md](README.zh.md) |
|
|
||||||
| `pack` 命令 | [docs/en/pack.en.md](docs/en/pack.en.md) | [docs/zh/pack.zh.md](docs/zh/pack.zh.md) |
|
|
||||||
| `update` 命令 | [docs/en/update.en.md](docs/en/update.en.md) | [docs/zh/update.zh.md](docs/zh/update.zh.md) |
|
|
||||||
|
|
||||||
## 贡献
|
|
||||||
|
|
||||||
- 阅读 [openRuyi 行为准则](https://openruyi.cn/governance/legal/code-of-conduct) 并同意遵守。
|
|
||||||
- 阅读 [AI 辅助贡献政策](https://openruyi.cn/governance/policy/ai-contribution-policy),且此 Pull Request 包含实质性的 AI 辅助内容时需要说明。
|
|
||||||
|
|
||||||
## 许可证
|
|
||||||
|
|
||||||
go2spec 使用 BSD-3-Clause 许可证,见 [LICENSE](LICENSE)。
|
|
||||||
+4
-4
@@ -38,9 +38,8 @@ func shortCommitHash(hash string) string {
|
|||||||
|
|
||||||
// pkgVersionFromGit determines the actual version to be packaged
|
// pkgVersionFromGit determines the actual version to be packaged
|
||||||
// from the git repository status and user preference.
|
// from the git repository status and user preference.
|
||||||
// Besides returning the upstream version, the "upstream" struct
|
// Besides returning the upstream version, the "upstream" struct fields
|
||||||
// struct fields u.version, u.commitIsh, u.hasRelease and u.isRelease
|
// u.version, u.commitID, u.commitIsh, u.hasRelease and u.isRelease are also set.
|
||||||
// are also set.
|
|
||||||
// `preferredRev` should be empty if there are no user preferences.
|
// `preferredRev` should be empty if there are no user preferences.
|
||||||
// TODO: also support other VCS
|
// TODO: also support other VCS
|
||||||
func pkgVersionFromGit(gitdir string, u *upstream, preferredRev string, forcePrerelease bool) (string, error) {
|
func pkgVersionFromGit(gitdir string, u *upstream, preferredRev string, forcePrerelease bool) (string, error) {
|
||||||
@@ -129,9 +128,10 @@ func pkgVersionFromGit(gitdir string, u *upstream, preferredRev string, forcePre
|
|||||||
}
|
}
|
||||||
fullCommitHash := strings.TrimSpace(string(fullCommitHashBytes))
|
fullCommitHash := strings.TrimSpace(string(fullCommitHashBytes))
|
||||||
lastCommitHash := shortCommitHash(fullCommitHash)
|
lastCommitHash := shortCommitHash(fullCommitHash)
|
||||||
|
u.commitID = fullCommitHash
|
||||||
u.commitIsh = lastCommitHash
|
u.commitIsh = lastCommitHash
|
||||||
|
|
||||||
// Snapshot versions are based on the packaging date, not the commit date.
|
// Snapshot versions are based on the packaging date, not the commit date.
|
||||||
u.version = fmt.Sprintf("0+git%s.%s\n%%define commit_id %s", packagingDateString(), lastCommitHash, fullCommitHash)
|
u.version = fmt.Sprintf("0+git%s.%s", packagingDateString(), lastCommitHash)
|
||||||
return u.version, nil
|
return u.version, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
# pack Command
|
|
||||||
|
|
||||||
[](../zh/pack.zh.md)
|
|
||||||
[](update.en.md)
|
|
||||||
|
|
||||||
`pack` generates an RPM spec draft and a source archive from a Go import path.
|
|
||||||
|
|
||||||
**This command is intended to produce a maintainable starting point, not a final package that can be submitted directly. Always review the generated spec manually before submitting it to openRuyi or using it for builds.**
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec pack [FLAG]... <go-package-importpath>
|
|
||||||
```
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec pack golang.org/x/net
|
|
||||||
```
|
|
||||||
|
|
||||||
## Flags
|
|
||||||
|
|
||||||
```text
|
|
||||||
-git_revision <rev>
|
|
||||||
Check out a specific git revision, such as a tag, branch, or commit
|
|
||||||
|
|
||||||
-force_prerelease
|
|
||||||
Package HEAD or tip instead of preferring the latest tagged version
|
|
||||||
|
|
||||||
-type <type>
|
|
||||||
Select the package type, supported values are library, program, library+program, and program+library
|
|
||||||
|
|
||||||
-program_package_name <name>
|
|
||||||
Override the program package name, and the source package name when appropriate
|
|
||||||
|
|
||||||
-allow_unknown_hoster
|
|
||||||
Allow package-name generation for unknown hosters, Review the generated name manually
|
|
||||||
```
|
|
||||||
|
|
||||||
## Output
|
|
||||||
|
|
||||||
A successful run creates these files in the current directory:
|
|
||||||
|
|
||||||
- `<package-name>/`, package working directory
|
|
||||||
- `<package-name>/<package-name>.spec`, generated RPM spec draft
|
|
||||||
- `<package-name>_<version>.orig.tar.<gz|xz>`, upstream source archive
|
|
||||||
|
|
||||||
If the target package directory already exists and is not empty, go2spec aborts to avoid overwriting existing work.
|
|
||||||
|
|
||||||
## Package Types
|
|
||||||
|
|
||||||
- `library`, for Go library modules
|
|
||||||
- `program`, for command packages whose root package is `main`
|
|
||||||
- `library+program`, for projects that ship both library files and command subpackages
|
|
||||||
- `program+library`, for program-first projects that also need a library subpackage
|
|
||||||
|
|
||||||
When `-type` is omitted, go2spec uses pkg.go.dev package metadata and local `go list` output to infer the type.
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
# update Command
|
|
||||||
|
|
||||||
[](../zh/update.zh.md)
|
|
||||||
[](pack.en.md)
|
|
||||||
|
|
||||||
`update` scans existing Go spec packages, checks the latest upstream version, and can update the spec version.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update [options] <SPECS_DIR>
|
|
||||||
```
|
|
||||||
|
|
||||||
`<SPECS_DIR>` must contain `go-*` subdirectories with spec files.
|
|
||||||
|
|
||||||
```text
|
|
||||||
SPECS_DIR/
|
|
||||||
go-golang-x-net/
|
|
||||||
go-golang-x-net/go-golang-x-net.spec
|
|
||||||
```
|
|
||||||
|
|
||||||
## Options
|
|
||||||
|
|
||||||
```text
|
|
||||||
-n
|
|
||||||
Dry run, detect updates only, do not modify files
|
|
||||||
|
|
||||||
-j <num>
|
|
||||||
Number of concurrent checks, default is 3
|
|
||||||
```
|
|
||||||
|
|
||||||
## Recommended Workflow
|
|
||||||
|
|
||||||
Start with dry run mode:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -n /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
Apply updates after reviewing the output:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -j 4 /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
Review the generated diff before committing packaging changes.
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
# pack 命令
|
|
||||||
|
|
||||||
[](../en/pack.en.md)
|
|
||||||
[](update.zh.md)
|
|
||||||
|
|
||||||
`pack` 根据 Go import path 生成 RPM spec 初稿和源码归档。
|
|
||||||
|
|
||||||
**该命令用于生成可继续维护的起点,不是最终可直接提交的包,提交到 openRuyi 或用于构建前必须人工 review 生成的 spec。**
|
|
||||||
|
|
||||||
## 用法
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec pack [FLAG]... <go-package-importpath>
|
|
||||||
```
|
|
||||||
|
|
||||||
示例:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec pack golang.org/x/net
|
|
||||||
```
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
```text
|
|
||||||
-git_revision <rev>
|
|
||||||
checkout 指定 git revision,例如 tag、branch 或 commit
|
|
||||||
|
|
||||||
-force_prerelease
|
|
||||||
打包 HEAD 或 tip,而不是优先选择最新 tag
|
|
||||||
|
|
||||||
-type <type>
|
|
||||||
选择包类型,支持 library、program、library+program 和 program+library
|
|
||||||
|
|
||||||
-program_package_name <name>
|
|
||||||
覆盖程序包名,适用时也覆盖源包名
|
|
||||||
|
|
||||||
-allow_unknown_hoster
|
|
||||||
允许未知 hoster 参与包名生成,生成结果必须人工检查
|
|
||||||
```
|
|
||||||
|
|
||||||
## 输出
|
|
||||||
|
|
||||||
执行成功后会在当前目录创建:
|
|
||||||
|
|
||||||
- `<package-name>/`,package 工作目录
|
|
||||||
- `<package-name>/<package-name>.spec`,生成的 RPM spec 初稿
|
|
||||||
- `<package-name>_<version>.orig.tar.<gz|xz>`,上游源码归档
|
|
||||||
|
|
||||||
如果目标 package 目录已存在且非空,go2spec 会停止执行,以避免覆盖已有工作。
|
|
||||||
|
|
||||||
## 包类型
|
|
||||||
|
|
||||||
- `library`,适合 Go library module
|
|
||||||
- `program`,适合根 package 为 `main` 的命令包
|
|
||||||
- `library+program`,适合同时发布库文件和命令子包的项目
|
|
||||||
- `program+library`,适合以程序为主,同时需要库子包的项目
|
|
||||||
|
|
||||||
不传 `-type` 时,go2spec 会根据 pkg.go.dev package 元数据和本地 `go list` 输出推断类型。
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
# update 命令
|
|
||||||
|
|
||||||
[](../en/update.en.md)
|
|
||||||
[](pack.zh.md)
|
|
||||||
|
|
||||||
`update` 扫描已有 Golang spec 包,检查上游最新版本,并可更新 spec 版本。
|
|
||||||
|
|
||||||
## 用法
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update [options] <SPECS_DIR>
|
|
||||||
```
|
|
||||||
|
|
||||||
`<SPECS_DIR>` 必须包含带 spec 文件的 `go-*` 子目录。
|
|
||||||
|
|
||||||
```text
|
|
||||||
SPECS_DIR/
|
|
||||||
go-golang-x-net/
|
|
||||||
go-golang-x-net/go-golang-x-net.spec
|
|
||||||
```
|
|
||||||
|
|
||||||
## 参数
|
|
||||||
|
|
||||||
```text
|
|
||||||
-n
|
|
||||||
dry run,只检测更新,不修改文件
|
|
||||||
|
|
||||||
-j <num>
|
|
||||||
并发检查数量,默认 3
|
|
||||||
```
|
|
||||||
|
|
||||||
## 推荐流程
|
|
||||||
|
|
||||||
先执行 dry run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -n /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
确认输出后再执行更新:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go2spec update -j 4 /path/to/SPECS
|
|
||||||
```
|
|
||||||
|
|
||||||
提交 packaging 变更前必须 review 生成的 diff。
|
|
||||||
@@ -38,6 +38,7 @@ type upstream struct {
|
|||||||
tarPath string // path to the downloaded or generated orig tarball tempfile
|
tarPath string // path to the downloaded or generated orig tarball tempfile
|
||||||
compression string // compression method, either "gz" or "xz"
|
compression string // compression method, either "gz" or "xz"
|
||||||
version string // upstream version number, e.g. 0.0~git20180204.1d24609
|
version string // upstream version number, e.g. 0.0~git20180204.1d24609
|
||||||
|
commitID string // full commit hash for commit-pinned snapshot builds
|
||||||
tag string // Latest upstream tag, if any
|
tag string // Latest upstream tag, if any
|
||||||
commitIsh string // commit-ish corresponding to upstream version to be packaged
|
commitIsh string // commit-ish corresponding to upstream version to be packaged
|
||||||
remote string // git remote, set to short hostname if upstream git history is included
|
remote string // git remote, set to short hostname if upstream git history is included
|
||||||
@@ -327,7 +328,7 @@ func moduleUsesRepoSubdir(modulePath, repoURL string) bool {
|
|||||||
// the upstream version maps cleanly to %{commit_id} or %{version}.
|
// the upstream version maps cleanly to %{commit_id} or %{version}.
|
||||||
func (u *upstream) sourceRefForSpec() (string, error) {
|
func (u *upstream) sourceRefForSpec() (string, error) {
|
||||||
ref := u.tag
|
ref := u.tag
|
||||||
if strings.Contains(u.version, "commit_id") {
|
if u.commitID != "" {
|
||||||
ref = "%{commit_id}"
|
ref = "%{commit_id}"
|
||||||
} else if u.isRelease && u.tag == "v"+u.version {
|
} else if u.isRelease && u.tag == "v"+u.version {
|
||||||
ref = "v%{version}"
|
ref = "v%{version}"
|
||||||
|
|||||||
+13
-5
@@ -428,8 +428,9 @@ func TestGetPkgsitePackageRetriesAmbiguousPathWithLongestModule(t *testing.T) {
|
|||||||
|
|
||||||
func TestSourceURLForSpecUsesCommitIDMacro(t *testing.T) {
|
func TestSourceURLForSpecUsesCommitIDMacro(t *testing.T) {
|
||||||
u := upstream{
|
u := upstream{
|
||||||
repoURL: "https://github.com/example/project",
|
repoURL: "https://github.com/example/project",
|
||||||
version: "0+git20260522.abcdef\n%define commit_id 0123456789abcdef",
|
version: "0+git20260522.abcdef",
|
||||||
|
commitID: "0123456789abcdef",
|
||||||
}
|
}
|
||||||
got, err := u.sourceURLForSpec("github.com/example/project")
|
got, err := u.sourceURLForSpec("github.com/example/project")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -494,8 +495,9 @@ func TestSourceURLForSpecUsesModuleProxyForRepoSubmodule(t *testing.T) {
|
|||||||
|
|
||||||
func TestSourceURLForSpecRejectsCommitIDForRepoSubmodule(t *testing.T) {
|
func TestSourceURLForSpecRejectsCommitIDForRepoSubmodule(t *testing.T) {
|
||||||
u := upstream{
|
u := upstream{
|
||||||
repoURL: "https://github.com/charmbracelet/x",
|
repoURL: "https://github.com/charmbracelet/x",
|
||||||
version: "0+git20260522.abcdef\n%define commit_id abcdef1234567890",
|
version: "0+git20260522.abcdef",
|
||||||
|
commitID: "abcdef1234567890",
|
||||||
}
|
}
|
||||||
_, err := u.sourceURLForSpec("github.com/charmbracelet/x/ansi")
|
_, err := u.sourceURLForSpec("github.com/charmbracelet/x/ansi")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -529,7 +531,7 @@ func TestPkgVersionFromGitUsesPackagingDateAndSevenCharHash(t *testing.T) {
|
|||||||
}, "commit", "-m", "initial")
|
}, "commit", "-m", "initial")
|
||||||
|
|
||||||
fullHash := strings.TrimSpace(runGit(t, dir, nil, "rev-parse", "HEAD"))
|
fullHash := strings.TrimSpace(runGit(t, dir, nil, "rev-parse", "HEAD"))
|
||||||
want := "0+git20250808." + fullHash[:7] + "\n%define commit_id " + fullHash
|
want := "0+git20250808." + fullHash[:7]
|
||||||
|
|
||||||
u := upstream{}
|
u := upstream{}
|
||||||
got, err := pkgVersionFromGit(dir, &u, "", false)
|
got, err := pkgVersionFromGit(dir, &u, "", false)
|
||||||
@@ -539,6 +541,12 @@ func TestPkgVersionFromGitUsesPackagingDateAndSevenCharHash(t *testing.T) {
|
|||||||
if got != want {
|
if got != want {
|
||||||
t.Fatalf("pkgVersionFromGit() = %q, want %q", got, want)
|
t.Fatalf("pkgVersionFromGit() = %q, want %q", got, want)
|
||||||
}
|
}
|
||||||
|
if strings.Contains(got, "\n") || strings.Contains(got, "commit_id") {
|
||||||
|
t.Fatalf("pkgVersionFromGit() returned metadata in version: %q", got)
|
||||||
|
}
|
||||||
|
if u.commitID != fullHash {
|
||||||
|
t.Fatalf("commitID = %q, want %q", u.commitID, fullHash)
|
||||||
|
}
|
||||||
if strings.Contains(got, "19990102") {
|
if strings.Contains(got, "19990102") {
|
||||||
t.Fatalf("pkgVersionFromGit() used commit date: %q", got)
|
t.Fatalf("pkgVersionFromGit() used commit date: %q", got)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,13 +122,8 @@ func writeSpec(dir, gopkg, openRuyiSrc, openRuyiLib, openRuyiProgram, version st
|
|||||||
fmt.Fprintf(f, "%%define _name %s\n", upstreamName)
|
fmt.Fprintf(f, "%%define _name %s\n", upstreamName)
|
||||||
fmt.Fprintf(f, "%%define go_import_path %s\n", gopkg)
|
fmt.Fprintf(f, "%%define go_import_path %s\n", gopkg)
|
||||||
|
|
||||||
// If pkgVersionFromGit embedded a commit_id define in u.version, extract and write it here
|
if u.commitID != "" {
|
||||||
commitRe := regexp.MustCompile(`%define\s+commit_id\s+([0-9a-fA-F]+)`)
|
fmt.Fprintf(f, "%%define commit_id %s\n", u.commitID)
|
||||||
if m := commitRe.FindStringSubmatch(u.version); m != nil {
|
|
||||||
fmt.Fprintf(f, "%%define commit_id %s\n", m[1])
|
|
||||||
// Remove the embedded %define line from version so it doesn't get written to Version: field
|
|
||||||
version = commitRe.ReplaceAllString(version, "")
|
|
||||||
version = strings.TrimSpace(version)
|
|
||||||
}
|
}
|
||||||
fmt.Fprintf(f, "\n")
|
fmt.Fprintf(f, "\n")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user