Kun je hg klonen zonder standaard pad te krijgen?

KORT:

hg-kloon maakt pad "standaard" in /.hg/hgrc, ingesteld op waar je hebt gekloond.

Vraag: is het mogelijk om dit automatisch uit te schakelen?

DETAIL:

Dit is al gedeeltelijk beantwoord.

In Kun je voorkomen dat je standaard pusht, maar pull toestaan? we zien hoe standaard-push in te stellen, in sommige hgrc-bestanden zoals /.hg/hgrc, of (mijn voorkeur), in ~/.hgrc

In Is hg-kloon equivalent met hg (init → pull) Tim Henigan zegt dat hg clone = init; Trekken; hg update standaard; standaardpad in /.hg/hgrc instellen.

Hoewel we elders zien dat dit niet helemaal waar is. hg-kloon kan verschillen, bijvoorbeeld omdat het delen van harde koppelingen doet. Geen officieel gelijkwaardigheidsverklaring ...

Nu helpt het uitschakelen van de standaard-push veel.

Maar ... ik ben gewoon geworden om 'hg push default' te doen. Die enigszins de p; urpose defaets.

By the way: reason I am doing this, wanting to disable the default: workflow that goes master->workspace->staging_area->master. I do many clones of the master. Modifying /.hg/hgrc to edit [path] default each time I do a cline is a pain. Doing "hg push" or "hg push default" in any of the workspaces can be bad. Instead I need to push to the staging area, ad only from the staging area am I allowed to push to the master.

(I have tried master<->staging_area<->workspace, i.e. always cloning from the sdtaging area. But I found this confusing. Plus, the part that I haven't said yet: my project makes me delete or collapse history, which adds an additional level of confusion and error-prone-ness.)

2
Overigens schrijf ik nu een "my-clone" perl-script - hoewel het opmerkelijk is hoe moeilijk het is om het robuust en isomorf te maken voor de bestaande kloon.)
toegevoegd de auteur Krazy Glew, de bron

1 antwoord

Dit is de post-kloonhaak die ik bedacht heb:

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

en het perl-script is hieronder.

Ik zou nog steeds graag een one-liner willen vinden.

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

print "editing /.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 -U10 $hgrc $hgrc.tmp; echo ''");


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);
0
toegevoegd
Ik zocht overal naar een oplossing voor mijn stackoverflow-vraag (44584264): "post-clone hook om bestanden naar nieuw gekloonde repo te kopiëren" maar heeft niets gevonden. Het lijkt me dat je script kan worden afgestemd om te bereiken wat ik wil. Maar ik kan niet eerlijk bedenken wat er gedaan moet worden, omdat ik niet bekwaam ben in Perl. Zou uw hulp op prijs stellen.
toegevoegd de auteur SFbay007, de bron