Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 599914 - app-portage/repoman has issues with git type changes file -> symlink
Summary: app-portage/repoman has issues with git type changes file -> symlink
Status: RESOLVED WONTFIX
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Repoman (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Portage team
URL: https://archives.gentoo.org/gentoo-de...
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-11-15 20:23 UTC by William L. Thomson Jr.
Modified: 2022-07-12 03:18 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description William L. Thomson Jr. 2016-11-15 20:23:09 UTC
I like to use symlinks in repos, mostly for latest revision linked to live ebuild. Actual code in 9999 ebuild, an latest version symlinks to that. I have noticed if I do type changes in git, repoman does not respect this. It leaves a file uncommitted. I would assume repoman would add all files that were added via git add . but that is not the case. I have to run git commit --amend to add the file repoman missed.

Easier to show than say.

$ git add .

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        typechange: jclouds-drivers-jsch-1.9.2.ebuild
        copied:     jclouds-drivers-jsch-1.9.2.ebuild -> jclouds-drivers-jsch-9999.ebuild                                                                       


$ repoman commit 

RepoMan scours the neighborhood...
>>> Creating Manifest for /usr/portage/local/os-xtoo/dev-java/jclouds-drivers-jsch

Note: use --include-dev (-d) to check dependencies for 'dev' profiles

* 1 files being committed... 
[master 0a81c74] dev-java/jclouds-drivers-jsch: Added live version
 1 file changed, 51 insertions(+)
 create mode 100644 dev-java/jclouds-drivers-jsch/jclouds-drivers-jsch-9999.ebuild

Commit complete.
RepoMan sez: "If everyone were like you, I'd be out of business!"


$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        typechange: jclouds-drivers-jsch-1.9.2.ebuild


$ git commit --amend
[master 0867bdd] dev-java/jclouds-drivers-jsch: Added live version
 Date: Mon Nov 7 20:40:48 2016 -0500
 2 files changed, 18 insertions(+), 48 deletions(-)
 rewrite dev-java/jclouds-drivers-jsch/jclouds-drivers-jsch-1.9.2.ebuild (100%)
 mode change 100644 => 120000
 copy dev-java/jclouds-drivers-jsch/{jclouds-drivers-jsch-1.9.2.ebuild => jclouds-drivers-jsch-9999.ebuild} (67%)
Comment 1 Zac Medico gentoo-dev 2016-11-16 19:51:50 UTC
Since repoman doesn't do any lstat calls, I suspect parsing of git output inside repoman/pym/repoman/modules/vcs/git/changes.py might be a contributor.
Comment 2 Zac Medico gentoo-dev 2016-11-16 19:55:24 UTC
Symlinks are banned from the gentoo tree, as discussed here:

http://gentoo.2317880.n4.nabble.com/symlinks-in-the-tree-td301142.html

We might use a metadata/layout.conf setting to control whether or not symlinks are allowed.
Comment 3 William L. Thomson Jr. 2016-11-16 23:08:38 UTC
I am not surprised by the comments in that post. I disagree with many things with the current status quo in Gentoo. Most that commented I disagree with on other non technical things. Easy to see how approaches and pros/cons can vary.

Thanks for pointing out that post. I was unware the topic came up. I was considering a similar one and had not searched archives. It does not seem like many commented on that. Did the council take a stance one way or another? Repoman surely does not ban use of symlinks, no warnings, it commits them just not type changes.

I would question running Gentoo on a filesystem that did not support symlinks. I think quite many ebuilds create symlinks. How can portage not use something ebuilds are creating. Seems neither would work on a filesystem that did not support it. NOt sure how valid of an argument that is, and it is the strongest one.

Now with regard to stabilization, that would be a case for making a copy of the ebuild. However it could also be handled with a conditional in the ebuild.

There are simply to many cases where ebuilds are literally copied for a version bump. The contents does not change at all. At the same time, you could apply a fix to on that may be required on several and making it to a file that is symlinked can make that easier. Like live ebuild always being real, ~arch always being a symlink, and if needed can copy to a file for stable arch.

While it may not reduce size of git. It could substantially reduce the size of the portage tree. It can always help with cleanup as there would be less copies around. At the same time, if the ebuild has not changed, you could have many versions kept around as they are just symlinks and not much overhead.

I use them in my repo and do not have any plans to stop using them as I see far to many benefits. More so when managing large amounts of ebuilds, it is a major time saver. For any package I have at least 1 less ebuild to maintain or modify.

If repoman wants to address that it would be cool. Its a one off scenario when you change an actual file to a symlink. Even that is pretty rare as I am getting more in the habit of doing the symlink stuff by default. repoman respects symlinks otherwise, just has issues with type changes, file changed to a symlink of the same name.
Comment 4 Brian Dolbec (RETIRED) gentoo-dev 2016-11-17 04:12:50 UTC
Repoman can have things configured per repo.  In fact more things will become configurable with the stage3 of the re-write.

The git module was just not checking for or tracking any "T" type changes.  I've already started some code to add that capability.  I will most likely have the option defaulted to not allow symlinks, but a simple layout.conf option should be all that will be needed to allow them.
Comment 5 William L. Thomson Jr. 2016-11-17 16:01:56 UTC
Configurable per repo sounds great thanks!

This is a pretty rare scenario, thank you for addressing in repoman!
Comment 6 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2022-07-12 03:18:25 UTC
repoman support has been removed per bug 835013.

Please file a new bug (or, I suppose, reopen this one) if you feel this check is still applicable to pkgcheck and doesn't already exist.