你可以做hg克隆而不获取默认路径吗?

时间:2012-06-23 21:08:08

标签: mercurial

附图:

hg clone在/.hg/hgrc中创建路径“default”,设置为从中克隆的位置。

问:是否可以自动禁用此功能?

DETAIL:

这已经部分回答了。

Can you prevent default-push, but allow pull?中我们看到如何设置default-push,在某些hgrc文件中,例如/.hg/hgrc,或者(我的偏好),在〜/ .hgrc中

Is hg clone equivalent to hg (init→pull) 蒂姆亨尼根说hg clone = init;拉; hg update default;在/.hg/hgrc中设置默认路径。

虽然在其他地方我们看到这不是真的。 hg克隆可能不同,例如,它进行硬链接共享。缺乏正式的等同声明......

现在,禁用default-push会有很大帮助。

但是......我已经养成了“hg push default”的习惯。这有点违反了p; urpose。

顺便说一句:原因我这样做,想要禁用默认设置:工作流程是主要的 - > workspace-> staging_area-> master。我做了很多主人的克隆。每次进行cline时修改/.hg/hgrc以编辑[path]默认值都很痛苦。在任何工作空间中执行“hg push”或“hg push default”都可能很糟糕。相反,我需要推送到临时区域,广告只能从我可以推送给主人的暂存区域进行。

(我已经尝试了主< - > staging_area< - >工作区,即总是从sdtaging区域克隆。但我发现这令人困惑。另外,我尚未说过的部分:我的项目让我删除或崩溃历史,这会增加额外的混乱程度和容易出错的错误。)

1 个答案:

答案 0 :(得分:0)

这是我提出的克隆后挂钩:

 [hooks]
 post-clone = perl ~/bin/delete-default-from-.hgrc "$HG_PATS"

并且perl脚本在下面。

我还是想找个单行。

#!/usr/local/bin/perl
use strict;

print "editing <repo>/.hg/hgrc to to remove [paths] / default";

# Hand tested
# cd ~/mips/uarch-perf-sim/psim+stuff/f; rm -rf k; hg clone ../m k
# cd ~/mips/uarch-perf-sim/psim+stuff/f; rm -rf k; hg clone ../m

my $debug = 0;


my $hg_pats = $ARGV[0];
die "Usage: delete-default-from-.hgrc HG_PATS (from post-clone hook)\n" if !exists $ARGV[0] || exists $ARGV[2];


# expect HG_PATS from post-clone hook

#['../m']
#['../m', 'target']"
#['../m', '../target']"

my $from;
my $target;

if( $hg_pats =~ m/^\['([^']+)'\]$/ ) {
    $from = $1;
    $target = $from;
    # delete paths if target implicit
    $target =~ s{.*/}{};
    print "from-only: $target\n" if $debug;
} elsif( $hg_pats =~ m/^\['([^']+)',\s+'([^']+)'\]$/ ) {
    $from = $1;
    $target = $2;
    # do NOT delete paths if target explicit
    print "from to: $target\n" if $debug;
} else {
    die "expected HG_PATS, got: $hg_pats\n";
}

die "clone target not found: $target\n" if ! -d $target;

my $hgrc = "$target/.hg/hgrc";
die "clone target/.hg/hgrc not found: $hgrc\n" if ! -r "$hgrc";

open( my $in, "<$hgrc" ) || die "could not open $hgrc to read (edit)\n";
unlink "$hgrc.tmp";
open( my $out, ">$hgrc.tmp" ) || die "could not open $hgrc.tmp to write\n";

my $section = '';
my $paths_found;
my $paths_default_found;
while( my $line = <$in> ) {
    chomp($line);
    print "line = $line\n" if $debug;

    if( $line =~ m/^\[paths\]/ ) {
    $section = "[paths]";
        $paths_found++;
    }
    elsif( $line =~ m/^\[/ ) {
    $section = $line;
    }
    elsif( ($section eq "[paths]") and ($line =~ m/^\s*default\s*=/) ) {
    $line =~ s/default/default-cloned-from/;
        $paths_default_found++;
    }
    print $out $line."\n";
}

die "[paths] section not found in $hgrc" if ! $paths_found;
die "[paths] / default not found in $hgrc" if ! $paths_default_found;

system("echo '<diff edited $hgrc>';diff -U10 $hgrc $hgrc.tmp; echo '</diff>'");


unlink "$hgrc.orig";
die "could not unlink older $hgrc.orig" if -e "$hgrc.orig";

rename "$hgrc","$hgrc.orig" || die "could not rename $hgrc to $hgrc.orig";

rename "$hgrc.tmp","$hgrc" || die "could not rename $hgrc.tmp to $hgrc";

system("echo '$hgrc:';cat $hgrc");

exit(0);