Aleks-Daniel Jakimenko-Aleksejev edited this page Nov 28, 2017 · 10 revisions

This is an IRC bot for running code at a given commit of Rakudo. It can be addressed by its full name ('committable6') or its short names ('commit', 'c').

You can find some extra examples in tests: committable.t

Usage examples


<MasterDuke> commit: f583f22 say $*PERL.compiler.version
<committable6> MasterDuke, ¦«f583f22»:
<AlexDaniel> commit: HEAD say lines[0]
<committable6> AlexDaniel, ¦«HEAD»: ♥🦋 ꒛㎲₊⼦🂴⧿⌟ⓜ≹℻ 😦⦀🌵 🖰㌲⎢➸ 🐍💔 🗭𐅹⮟⿁ ⡍㍷⽐

Run something across all available releases

<AlexDaniel> commit: releases say $*PERL
<committable6> AlexDaniel, ¦«2015.10,2015.11»: Perl 6 (6.b)␤¦«2015.12,2016.02,2016.03,2016.04,2016.05,2016.06,2016.07,2016.08,HEAD»: Perl 6 (6.c)

6.c releases have a shortcut:

<AlexDaniel> 6c: say (42, 24).pick
<committable6> AlexDaniel, ¦2015.12,2016.02,2016.07.1,2016.08.1: «24» ¦2016.01.1,2016.03,2016.04,2016.05,2016.06,HEAD(1668b4f): «42»

Large output

If the output is too big to fit into one IRC message, it will be uploaded and you will be given a link.

<AlexDaniel> commit: HEAD .say for ^1000
<committable6> AlexDaniel,

Multiple commits

<AlexDaniel> commit: 2016.02,2016.03,9ccd848,HEAD say ‘hello’
<committable6> AlexDaniel, ¦«2016.02,2016.03,9ccd848,HEAD»: hello
<AlexDaniel> commit: HEAD~100,HEAD say $*PERL.compiler.version
<committable6> AlexDaniel, ¦«HEAD~10»: v2016.07.1.169.g.4.dd.6223␤¦«HEAD»: v2016.08.1.35.g.575.dda.1
<AlexDaniel> commit: 2016.03^^,2016.03 say 42
<committable6> AlexDaniel, ¦«2016.03^^,2016.03»: 42


You can try specifying a range. Keep in mind that it may time out if you try something that takes significant amount of time to run. It will only allow you run it across 1000 commits (you probably don't want anything bigger than that).

<AlexDaniel> commit: 2016.02..2016.03 say ^1000 .grep: -> $n {([+] ^$n .grep: -> $m {$m and $n %% $m}) == $n }
<committable6> AlexDaniel,

As always, it will group commits that have the same output.

Special characters

All ASCII control characters are converted into their printable unicode equivalents:

<AlexDaniel> commit: HEAD say (.chr for ^128).join
<committable6> AlexDaniel, ¦«HEAD»: ␀␁␂␃␄␅␆␇␈␉␤␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~␡

Note that instead of it prints .

Speaking of , you can use it for multiline output:

<AlexDaniel> commit: HEAD # This is a comment ␤ say 「hello world!」
<committable6> AlexDaniel, ¦«HEAD»: hello world!

External files

If your source code is too large, you can upload it somewhere.

<AlexDaniel> committable6: HEAD
<committable6> AlexDaniel, Successfully fetched the code from the provided URL.
<committable6> AlexDaniel, ¦«HEAD»: url test

Note that you have to provide a “raw” link. It does not care if it is on github or not, it will accept any url as long as the mime type is OK:

<AlexDaniel> committable6: HEAD
<committable6> AlexDaniel, It looks like a URL, but mime type is ‘text/html’ while I was expecting something with ‘text/plain’ or ‘perl’ in it. I can only understand raw links, sorry.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.