Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 在我的'R CMD build'文件名中获得最高的subversion版本_Svn_Bash_R - Fatal编程技术网

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'