Skip to content

Commit

Permalink
Disambiguate the term 'branch' in Arch vs git
Browse files Browse the repository at this point in the history
Disambiguate the term 'branch' in Arch vs git,
and start using fully-qualified names.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
  • Loading branch information
Eric Wong authored and Martin Langhoff committed Nov 17, 2005
1 parent 9b626e7 commit 22ff00f
Showing 1 changed file with 54 additions and 11 deletions.
65 changes: 54 additions & 11 deletions git-archimport.perl
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,24 @@ =head1 Devel tricks
Add print in front of the shell commands invoked via backticks.
=head1 Devel Notes
There are several places where Arch and git terminology are intermixed
and potentially confused.
The notion of a "branch" in git is approximately equivalent to
a "archive/category--branch--version" in Arch. Also, it should be noted
that the "--branch" portion of "archive/category--branch--version" is really
optional in Arch although not many people (nor tools!) seem to know this.
This means that "archive/category--version" is also a valid "branch"
in git terms.
We always refer to Arch names by their fully qualified variant (which
means the "archive" name is prefixed.
For people unfamiliar with Arch, an "archive" is the term for "repository",
and can contain multiple, unrelated branches.
=cut

use strict;
Expand Down Expand Up @@ -215,9 +233,41 @@ END
}

# process patchsets
foreach my $ps (@psets) {
# extract the Arch repository name (Arch "archive" in Arch-speak)
sub extract_reponame {
my $fq_cvbr = shift; # archivename/[[[[category]branch]version]revision]
return (split(/\//, $fq_cvbr))[0];
}

sub extract_versionname {
my $name = shift;
$name =~ s/--(?:patch|version(?:fix)?|base)-\d+$//;
return $name;
}

$ps->{branch} = branchname($ps->{id});
# convert a fully-qualified revision or version to a unique dirname:
# normalperson@yhbt.net-05/mpd--uclinux--1--patch-2
# becomes: normalperson@yhbt.net-05,mpd--uclinux--1
#
# the git notion of a branch is closer to
# archive/category--branch--version than archive/category--branch, so we
# use this to convert to git branch names.
# Also, keep archive names but replace '/' with ',' since it won't require
# subdirectories, and is safer than swapping '--' which could confuse
# reverse-mapping when dealing with bastard branches that
# are just archive/category--version (no --branch)
sub tree_dirname {
my $revision = shift;
my $name = extract_versionname($revision);
$name =~ s#/#,#;
return $name;
}

*git_branchname = *tree_dirname;

# process patchsets
foreach my $ps (@psets) {
$ps->{branch} = git_branchname($ps->{id});

#
# ensure we have a clean state
Expand Down Expand Up @@ -428,16 +478,9 @@ END
$opt_v && print " + parents: $par \n";
}

sub branchname {
my $id = shift;
$id =~ s#^.+?/##;
my @parts = split(m/--/, $id);
return join('--', @parts[0..1]);
}

sub apply_import {
my $ps = shift;
my $bname = branchname($ps->{id});
my $bname = git_branchname($ps->{id});

`mkdir -p $tmp`;

Expand Down Expand Up @@ -668,7 +711,7 @@ sub find_parents {
# simple loop to split the merges
# per branch
foreach my $merge (@{$ps->{merges}}) {
my $branch = branchname($merge);
my $branch = git_branchname($merge);
unless (defined $branches{$branch} ){
$branches{$branch} = [];
}
Expand Down

0 comments on commit 22ff00f

Please sign in to comment.