Svn 在我的'R CMD build'文件名中获得最高的subversion版本
下面的问题Svn 在我的'R CMD build'文件名中获得最高的subversion版本,svn,bash,r,Svn,Bash,R,下面的问题 R CMD build PKG根据DESCRIPTION中的字段创建名为Package_Version.tar.gz的文件 在这里,来自svn的严格顺序编号不仅不实用,而且其$REV:number$格式不尊重编号。编号版本:后预期的结构 我想我应该使用subversion版本号作为包版本的第三个“坐标”。第一个和第二个坐标将在重大变化时手动升高 但你“通常”是怎么做的 可以编写一个bash/grep/awk脚本,从源代码中获得最高的版本,这不会有问题。但是,configure是否在
R CMD build PKG
根据DESCRIPTION
中的字段创建名为Package_Version.tar.gz的文件
在这里,来自svn的严格顺序编号不仅不实用,而且其$REV:number$
格式不尊重编号。编号版本:
后预期的结构
我想我应该使用subversion版本号作为包版本的第三个“坐标”。第一个和第二个坐标将在重大变化时手动升高
但你“通常”是怎么做的
可以编写一个bash/grep/awk脚本,从源代码中获得最高的版本,这不会有问题。但是,configure
是否在R CMD build
之前运行?在这种情况下,可以从模板文件和最高版本号构建描述文件(不受源代码控制)
我的问题是关于惯例
“最佳”答案将允许我在r-forge上放置一个包,并在那里运行自动化脚本,根据r
子目录中提交的最新文件更新版本:
字段的第三个坐标
一个“足够好”的答案在本地是可行的,我已经有了,但我不再使用它了,因为我习惯了通常不可用的东西
因为它是关于实践的,所以我将添加我当前的实践作为可能的答案。它不是自动生成的,但我发现它清晰且(几乎)可以接受。我使用一个构建脚本,从svn中检出某个修订,用版本号更新描述,并将其构建到tar.gz中
我通过使用JRA中的路线图特性来将过程管理得更多,以将问题/ Svn提交作为版本捆绑(Apache基金会使用相同的基本方法)。p> 我使用一个构建脚本,它从svn中检出某个修订,用版本号更新描述,并将其构建到tar.gz中
我通过使用JRA中的路线图特性来将过程管理得更多,以将问题/ Svn提交作为版本捆绑(Apache基金会使用相同的基本方法)。p> 将时间戳2009年12月11日12:01:03转换为20091211120103会更容易吗。然后,您还可以在subversion中为构建添加一个标记,并知道哪个源对应于哪个构建。
使用时间戳Dec 11,2009 12:01:03转换为20091211120103会更容易些吗。然后,您还可以在subversion中为构建添加一个标记,并知道哪个源对应于哪个构建。调用“svversion”应该会提供您需要的信息
如果您的工作副本被修改,或者包含来自多个版本的文件,那么您将得到的不仅仅是版本号。范围(多个修订版)或后缀字母(修改、切换或稀疏工作副本)
调用“SvVersion”可以提供所需的信息
如果您的工作副本被修改,或者包含来自多个版本的文件,那么您将得到的不仅仅是版本号。范围(多个修订版)或后缀字母(修改、切换或稀疏工作副本)
我还使用svreversion将其自动化。例如,对于littler,当然是编译的,我这样做:
#!/bin/sh -e
svnversion() {
svnrevision=`LC_ALL=C svn info | awk '/^Revision:/ {print $2}'`
svndate=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'`
now=`date`
cat <<EOF > svnversion.h
// Do not edit! This file was autogenerated
// by $0
// on $now
//
// svnrevision and svndate are as reported by svn at that point in time,
// compiledate and compiletime are being filled gcc at compilation
#include <stdlib.h>
static const char* svnrevision = "$svnrevision";
static const char* svndate = "$svndate";
static const char* compiletime = __TIME__;
static const char* compiledate = __DATE__;
EOF
}
if [ "$#" -ge 0 ]; then
if [ "$1" = "--svnversion" ]; then
svnversion
exit
fi
fi
test -f svnversion.h || svnversion
对于R也可以这样做,最简单的方法是访问描述文件,就像我在回答问题时向Mario建议的那样
然后,为了最终回答您的问题:),您可以在任何您想要修改描述文件的地方,为存储库本身(或其顶级条目)按摩从svnversion获得的数字。但随后您修改了文件,并且不同步,因此您需要重新提交,获得新版本。。。因此,您需要在某种方式上与自己达成一致,以打破这种循环。我还使用svreversion来实现自动化。例如,对于littler,当然是编译的,我这样做:
#!/bin/sh -e
svnversion() {
svnrevision=`LC_ALL=C svn info | awk '/^Revision:/ {print $2}'`
svndate=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'`
now=`date`
cat <<EOF > svnversion.h
// Do not edit! This file was autogenerated
// by $0
// on $now
//
// svnrevision and svndate are as reported by svn at that point in time,
// compiledate and compiletime are being filled gcc at compilation
#include <stdlib.h>
static const char* svnrevision = "$svnrevision";
static const char* svndate = "$svndate";
static const char* compiletime = __TIME__;
static const char* compiledate = __DATE__;
EOF
}
if [ "$#" -ge 0 ]; then
if [ "$1" = "--svnversion" ]; then
svnversion
exit
fi
fi
test -f svnversion.h || svnversion
对于R也可以这样做,最简单的方法是访问描述文件,就像我在回答问题时向Mario建议的那样
然后,为了最终回答您的问题:),您可以在任何您想要修改描述文件的地方,为存储库本身(或其顶级条目)按摩从svnversion获得的数字。但随后您修改了文件,并且不同步,因此您需要重新提交,获得新版本。。。因此,您需要在某种方式上与自己达成一致,以打破这个循环。我看到,./cleanup是在R CMD build…
命令期间调用的
我想我会
- 在存储库中保留
DESCRIPTION.template
- 指示subversion忽略
说明
- 使用
清理脚本
- 接受我必须运行
R CMD build
两次(在cleanup
计算R CMD build
之前,DESCRIPTION
中的元信息由R CMD build
检查)
清理
:
#!/bin/bash
FLAGS=$(svnversion . | tr -cd A-Z)
VERSIONS=$(svnversion . | tr -d A-Z)
VERSIONS=$(echo $VERSIONS:$VERSIONS | cut -d: -f1,2)
LOW=${VERSIONS%:*}
HIGH=${VERSIONS#*:}
[ $LOW -ne $HIGH ] && echo "- mixed revisions in local copy ($LOW:$HIGH)"
[ "$FLAGS" != "" ] && echo "- local copy has flags: $FLAGS"
echo "- highest revision in local copy: $HIGH"
sed -re "s/(^Version:[^-]*).+$/\1-$HIGH/" DESCRIPTION.template > DESCRIPTION
DATE=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'`
now=$(date)
cat <<EOF > R/version.R
# Do not edit! This file was autogenerated
# by $0
# on $now
#
# DO NOT put this file under version control!
#
# SVNVERSION as the highest revision reported by svnversion.
# DATE as the Last Changed Date reported by svn info.
SVNVERSION <- "$HIGH"
SVNDATE <- "$DATE"
EOF
但是我也必须说,我对当前的解决方案很满意,我希望它对其他人有用。我看到,./cleanup在R CMD build…
命令期间被调用
我想我会
- 在存储库中保留
DESCRIPTION.template
- 指示subversion忽略
说明
- 使用
清理脚本
- 接受我必须运行
R CMD build
两次(在cleanup
计算R CMD build
之前,DESCRIPTION
中的元信息由R CMD build
检查)
清理
:
#!/bin/bash
FLAGS=$(svnversion . | tr -cd A-Z)
VERSIONS=$(svnversion . | tr -d A-Z)
VERSIONS=$(echo $VERSIONS:$VERSIONS | cut -d: -f1,2)
LOW=${VERSIONS%:*}
HIGH=${VERSIONS#*:}
[ $LOW -ne $HIGH ] && echo "- mixed revisions in local copy ($LOW:$HIGH)"
[ "$FLAGS" != "" ] && echo "- local copy has flags: $FLAGS"
echo "- highest revision in local copy: $HIGH"
sed -re "s/(^Version:[^-]*).+$/\1-$HIGH/" DESCRIPTION.template > DESCRIPTION
DATE=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'`
now=$(date)
cat <<EOF > R/version.R
# Do not edit! This file was autogenerated
# by $0
# on $now
#
# DO NOT put this file under version control!
#
# SVNVERSION as the highest revision reported by svnversion.
# DATE as the Last Changed Date reported by svn info.
SVNVERSION <- "$HIGH"
SVNDATE <- "$DATE"
EOF
但我也必须说,我对当前的解决方案感到满意,我希望它对其他人有用。我目前的做法根本不是自动化的:我给版本的三个坐标:
字段的含义与问题中的相同,但第三个坐标(svn修订号),我手动更新(增加一个)
mario@lt41:~/Local/.../Trunk/Rnens$ R CMD build src
* checking for file 'src/DESCRIPTION' ... OK
* preparing 'src':
* checking DESCRIPTION meta-information ... OK
* running cleanup
- highest revision in local copy: 8762
* removing junk files
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* building 'NenS_0.1-8762.tar.gz'