threads / patch / 13291

patchProtect current tags, import tags into remote tree

Subject: [updated PATCH] Protect current tags, import tags into remote tree

## tl;dr

4 messages between Apr 27, 2008 and Apr 29, 2008. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Stephen R. van den Berg· Apr 27, 2008, 17:32 UTC · lore

git-cvsimport properly creates a subdir in refs/remotes to put the branches in from the remote repository, it currently stores any tags directly in refs/tags, which makes the imported tags overwrite current ones. This patch makes sure that imported tags are under the proper refs/remotes/.../tags subdirectory as well.

Signed-off-by: Stephen R. van den Berg <srb@cuci.nl>
---
 git-cvsimport.perl |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to git-cvsimport.perl +1 −1
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 95c5eec..73109d6 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -781,7 +781,7 @@ sub commit {
 		$xtag =~ tr/_/\./ if ( $opt_u );
 		$xtag =~ s/[\/]/$opt_s/g;
 
-		system('git-tag', '-f', $xtag, $cid) == 0
+		system("git-update-ref $remote/tags/$xtag $cid") == 0
 			or die "Cannot create tag $xtag: $!\n";
 
 		print "Created tag '$xtag' on '$branch'\n" if $opt_v;
Junio C Hamano· Apr 28, 2008, 16:12 UTC · re: Stephen R. van den Berg · lore

Re: [updated PATCH] Protect current tags, import tags into remote tree

"Stephen R. van den Berg" <srb@cuci.nl> writes:
> ..., it currently stores any tags
> directly in refs/tags,...

which is consistent with the way all the native Porcelain commands handle tags. There is no per-remote namespace for tags in git Porcelain.

For some people, the patch would be an improvement, but for some other people, this would be a regression.

It needs discussion and concensus if we were to do this; currently I am not very much in favor of this change.

Stephen R. van den Berg· Apr 28, 2008, 18:48 UTC · re: Junio C Hamano · lore

Re: [updated PATCH] Protect current tags, import tags into remote tree

Junio C Hamano wrote:
>"Stephen R. van den Berg" <srb@cuci.nl> writes:
>> ..., it currently stores any tags
>> directly in refs/tags,...
>which is consistent with the way all the native Porcelain commands handle
>tags.  There is no per-remote namespace for tags in git Porcelain.
There is in git-svn.
>For some people, the patch would be an improvement, but for some other
>people, this would be a regression.

Due to the quirks of CVS (and SVN), over time many CVS/SVN repositories have picked up a lot of tags which either made sense at the time (but don't anymore), or have not been wiped because of the difficulty/impossibility to do so in the old repository.

The usual way to import from CVS is to do the import, then pick the branches and tags you really want to keep, copy/replicate them outside remotes and then move on in a clean fashion.

Rerunning cvsimport on a regular basis causes the import to (re)create all the tags from CVS again; if this is done in your regular tags space, this is a mess at best, or overwrites whatever renamed tags you carefully created which happen to match with old CVS tagnames.

git-svn *does* use the tags namespace under remotes, so it does it the
'proper' way.
With respect to the concern that all git porcelain works without a
separate remotes/.../tags namespace, two things:
- git-svn and git-cvsimport cross the boundary to a different VCS and
  therefore can/should use an extra barrier before (auto)converting to
  git native tags (and branches).
- I personally would find it most natural when upon cloning a git
  repository not only the branches cloned end up in a separate remotes
  namespace (like they do now already), but that the tags would do the same
  (e.g. in remotes/.../tags).

Even if this behaviour is not deemed "good" to be a new default, I'd strongly suggest to at least make it optional using an appropriate flag (and respective git-config variable to make it the local default).

-- 
Sincerely,                                                          srb@cuci.nl
           Stephen R. van den Berg.
"It is better for civilization to be going down the drain than
 to be coming up it."
Junio C Hamano· Apr 29, 2008, 06:18 UTC · re: Stephen R. van den Berg · lore

Re: [updated PATCH] Protect current tags, import tags into remote tree

"Stephen R. van den Berg" <srb@cuci.nl> writes:
Show 8 quoted lines
> Rerunning cvsimport on a regular basis causes the import to (re)create
> all the tags from CVS again; if this is done in your regular tags space,
> this is a mess at best, or overwrites whatever renamed tags you
> carefully created which happen to match with old CVS tagnames.
> ...
> - git-svn and git-cvsimport cross the boundary to a different VCS and
>   therefore can/should use an extra barrier before (auto)converting to
>   git native tags (and branches).

That sounds like a sound argument, and perhaps people may wish we did so from the day one. Alas, we didn't.

So the course of action would be to do these over a long period of time.
 - introduce this as an option now;
 - give another option to explicitly ask for the current behaviour;
 - perhaps give an advance warning that this optional behaviour will
   become the default; and
 - finally swap the default behaviour.
if people agree with this change, that is.

← back to recent threads