[prev in list] [next in list] [prev in thread] [next in thread] 

List:       macports-users
Subject:    Re: Fixing source-code bugs using MacPorts facilities.
From:       Ian Wadham <iandw.au () gmail ! com>
Date:       2020-07-29 8:51:13
Message-ID: AF8F5DE7-1EAF-4ECD-8CE4-C3CEB73CC550 () gmail ! com
[Download RAW message or body]


> On 29 Jul 2020, at 2:27 pm, Ken Cunningham <ken.cunningham.webuse@gmail.com> wrote:
> 
> > On Jul 28, 2020, at 9:22 PM, Ian Wadham <iandw.au@gmail.com> wrote:
> 
> > Also, Ken, I have worked out a way of maintaining a git repository of the source code and \
> > edits that is external to MacPorts and entirely under my control, so the need to avoid \
> > "install" is not so great. The compromise is that, after a bunch of edits, I will be using \
> > a script I wrote called  "./ship" to copy the changed files down into MacPorts' \
> > work/<source-dir-name> area, after editing and before (re)building and testing.
> 
> 
> If you get that to a sharable state, pls post it up so I can have a look.

There's nothing much to write home about.

Basically I have in my /kdedev/ports/kde/kpat portfile directory:

    files/    portfile  rebuild*  repo/     work@

I just used mkdir to create repo/, then populated it using something like:

    cp -R work/kpat-4.14.3/ repo

The ending slash on the source files of cp -R make it blatt all the files and subdirs into \
repo/ without creating a new kpat-4.14.3/ subdir.

I then made repo/ into a git repository and added the script called "ship".

At the moment, "ship" is just:

192-168-1-104:/kdedev/ports/kde/kpat>cat repo/ship
for f in $*
do
    cp $f ../work/kpat-4.14.3/$f
    echo "---" $f replaced in MacPorts
done

So I have to supply paths to recently edited files as parameters, but at least they can be \
validated by using bash filename completions. Another possibility is that I could use something \
like "git status --untracked-files=no —porcelain" to get a parseable list of changes and so \
automate the copying of recently made and not yet commited edits into MacPorts, within the \
script call "rebuild".

The "rebuild script at present is:

192-168-1-104:/kdedev/ports/kde/kpat>cat rebuild
#
# Wind the MacPorts state-file back to just before "build" state.
sudo sed -e'/build/,$d' work/.macports.kpat.state >temp
sudo cp temp work/.macports.kpat.state
rm temp

# Re-build, using the most recently edited source code.
sudo port -v build
sudo port destroot

Note that "cp" only cares about "rwx" access rights, not ownership or group membership. If the \
target file exists, it changes the contents of that file, without changing its attributes. So \
the state-file and everything down in MacPorts retain owner, group and access rights whenever \
my scripts change their contents.

> I've been meaning to write something for a portfile to override the "extract" and "patch" \
> portfile phases to just symlink the source directory into the work folder — come to think \
> of it, that might be all I need to do — but haven't got around to it. 
> There are a few massive ports I work on:
> 
> qt4-mac
> qt5.N for various older systems
> llvm-N

Errrmmm I would worry about making anything as big as those into single git repositories.

In KDE, at least, every app or library is just one repository, but they are grouped into \
categories (e.g. "kpat" is part of "games"). See https://invent.kde.org/games/kpat on GitLab. I \
guess Qt can be broken up similarly, from my experience of it. Divide and conquer… :-)

> that would benefit from this approach rather than what I do now.

With git, I am looking forward to using branches, where I can create and evaluate alternate \
solutions to the bugs I am chasing. Also, until I merge branches, I think I can easily get back \
to base with git checkout master, e.g. to do "before and after" testing of fixes.

Cheers,
Ian W.

> Ken


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic