Tshepang logs

Feed RSS

wajig 2.3 released

It's been many months since wajig was released, but this was about as good as any since I probably did far more work on it than on any other release so far:

  • The most user-visible change is that I changed the UI to feel more standard/natural, where each of the wajig COMMANDS are 1st-class citizens. Let me give an example of user wanting to install a package named nautilus, but avoid installing its Recommends depencencies:

    # ole
    wajig —norecommends INSTALL nautilus
    # new
    wajig INSTALL —norecommends nautilus
    

    I call this natural because it makes more sense to have the --norecommends command line option to be specified after the (wajig) subcommand it modifies. Also, the way it was implemented previously, the option would silently be ignored if it was used in a case where it was irrelevant. That's not good, and it links to the next user-visible change.

  • There is less magic and more strictness. Previously, these commands resulted in the same outcome:

    wajig REMOVEORPHANS
    wajig REMOVE-ORPHANS
    wajig R-____EMOVE-ORPH----___AN_S
    

    What wajig did was simply sanitise the commands, getting rid of the junk. Well, I don't like that, but since I didn't want to break people's commands/aliases/scripts I actually tried to preserve that functionality, but argparse didn't let me do that, and messing around with sys.argv before argparse jumped in was an error-prone mess, which links us to the next change, this time behind-the-scenes.

  • I replaced the archaic getopt CLI parser with a far more powerful argparse. This change alone, when I truly embraced it, using its subcommand methods (see point 1 above), resulting in a ridiculous work that involved mainly unfun work and resulted in changing (adding and removing) thousands of lines code.

  • The output of command wajig COMMANDS is now generated dynamically, instead of simply being read from a separate file. Advantage is that it should now remain more up-to-date.

  • The usage info for each COMMAND was store on its own file, and the aliases were symblic links to them. Now that's ugly, but I did it that was some time ago because I could not think of a better, quick way. The ugly solution is simple, but it added over a 100 files in user machines, which is just bad design. Well, modern Linux-based package management makes such invisible to all but the most avid/curious users, but I never liked it anyways. Now, all of that help info is auto-generated by argparse (you can imagine I'm a big fan of that module by now).

  • There's bunch of other changes, though most was code stuff. As for the user-visible stuff, a few COMMANDS were removed, a few options added/removed. Here's 'all' the gory details.