unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Christina O'Donnell <cdo@mutix.org>
To: Simon Tournier <zimon.toutoune@gmail.com>
Cc: guix-devel <guix-devel@gnu.org>
Subject: Re: Mechanism for helping in multi-channels configuration
Date: Sat, 3 Feb 2024 15:27:26 +0000	[thread overview]
Message-ID: <0109ba4a-f62f-b438-c0ba-f46e66395a7e@mutix.org> (raw)
In-Reply-To: <87v875kf5u.fsf@gmail.com>

Hi Simon,

> The wishlist is: provide a machine-readable description on guix-science
> channel side in order to help in finding the good overlap between
> commits of different channels.
>
> It could be nice if instead of an hard error, “guix pull” could say:
> « the channel ’guix’ needs to be at least at commit 1234abc ».

I was just thinking about these kinds of errors. It would also happen 
between
channels when packages are split from a single file (eg. golang.scm to
golang-xyz.scm). Then channels immediately go out of sync as we're doing
continual releases. So, it wouldn't just be for time-machine. It's all a 
bit too
fragile for my liking. I assume we won't be to frequent versioned 
releases any
time soon..

A sketch of a solution might be:

  1. Have a script that scrapes all the define-public symbols in every 
file in
     every package.
  2. Have a script that determines the symbols needed by each file. (Macros
     make this more difficult, but.)
  3. Have both scripts have an incremental version that runs on diffs (for
     performance).
  4. Run this for every commit on every branch on every channel caching the
     result.
  5. Have a CI script keep this updated for new commits.
  6. Have a server track incompatibilities.

For example, a 'definition-reference' could look like,

(definition-reference (commit-range start-hash end-hash)
                       file-path
                       identifier)

(definition-reference (commit-range "44b340d..." "06dba3b...")
                       "gnu/packages/golang"
                       'go-github-com-rs-xid)

Commit ranges makes the size of entries tractable (since package 
probably aren't
getting moved / deleted / added very much).

Then use a hash table, (or trie or B+ Tree, or distributed hash table, 
etc) to
go from identifier to definition-reference.

You would probably would also want to know commit date so you could 
index on it.
That would let you find versions that supplied the identifier that are 
as close
as possible chronologically to a particular version of a different channel

Now this isn't perfect (in case anyone was getting that impression ;):
  - It won't have any idea about version incompatibilities.
  - It couldn't trace renamed variables.
  - And probably more.

Might be useful to additionally track package versions, but that might 
run into
resource issues.

I'm thinking a Guile daemon backed by SQLite.. What do you think?

Full disclosure: I've got nothing lined up for the summer yet, so I'm on the
prowl for GSoC projects :)

Kind regards,
  - Christina



  reply	other threads:[~2024-02-03 15:28 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-03 10:36 Mechanism for helping in multi-channels configuration Simon Tournier
2024-02-03 15:27 ` Christina O'Donnell [this message]
2024-02-15 15:05   ` Simon Tournier
2024-03-18 16:05     ` Mechanism for helping in multi-channels configuration (and Xapian index) Christina O'Donnell
2024-05-06 12:05       ` Simon Tournier
2024-02-06 14:18 ` Mechanism for helping in multi-channels configuration Maxim Cournoyer
2024-02-06 17:08   ` Attila Lendvai
2024-02-06 17:16 ` Attila Lendvai
2024-02-15 21:14   ` Simon Tournier
2024-03-12 12:44     ` Attila Lendvai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0109ba4a-f62f-b438-c0ba-f46e66395a7e@mutix.org \
    --to=cdo@mutix.org \
    --cc=guix-devel@gnu.org \
    --cc=zimon.toutoune@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).