Git Product home page Git Product logo

straight.el's Issues

Add way to prune build directory

We currently prune the build cache on a successful init. We should also prune the build directory. This should be easy to implement, and harmless.

Prune versions.el

We should automatically remove no-longer-present packages from versions.el each time it is written using straight-save-versions.

Support registering a package without installing it

M-x straight-freeze-versions is supposed to install all packages, even ones not needed on the current system. Therefore, there needs to be a way to register a package with straight.el without actually installing it.

Add option to rebuild packages only on load

The current algorithm is O(n) in the number of packages at Emacs init. We could reduce this to O(n) in the number of packages loaded at Emacs init, if the user enables an option to only check packages for rebuilds when they are actually loaded. This option should be disabled by default since it requires putting advices on require and load.

One potential complication is that it's not clear how we could figure out what features are supposed to be require-able, if the packages are not built yet. Perhaps this indicates that #41 is a better way to improve performance.

Add README

We need some proper documentation in the README.

1.0 release

OBSOLETE: 1.0 release checklist

This is a tracking issue for issues that need to be closed for the 1.0 release of straight.el:

  • Improve user experience around package building:
    • Fix slowness while reloading init-file (#35).
    • Fix duplicate warnings on changing recipe (#34).
    • Investigate whether packages are built more than once during
      init (#27).
    • Add straight-rebuild and straight-rebuild-all commands (#10).
    • Dependencies are screwed up when installing after init.
    • Install even built-in packages (#38).
    • Record individual packages in bulk find(1) operation (#42).
    • Don't load package.el at runtime (#43).
    • Support registering a package without installing it (#44).
    • Make sure straight-freeze-versions installs registration-only packages before freezing.
    • Figure out why ESS wants to make autoloads (#61).
    • Automatically prune build directory (#50).
    • Build texinfo manuals (#71).
    • Support other build commands (#72).
  • Make version-control support more customizable.
    • Support upstream/fork workflow (#29).
    • Remove pbl (#25).
      • Fix superfluous symlinking (#63).
    • Support pluggable version-control backends.
    • Install versions specified in lockfile by default (#23).
      • Clone correct version of straight.el on initial setup (#56).
      • Allow to specify a custom recipe for straight.el (#57).
    • Support deferred installation in straight-freeze-versions (#24).
    • Add straight-override-package (#39).
    • Fix bugs introduced by new version-control support.
      • Fix issues with default-directory in popup system (#53).
      • Improve UX around pushing (#54).
      • Show unmerged commits when considering pull or push (#55).
      • Fetch if needed in straight-thaw-versions (#58).
      • Eliminate nil branch name error (#59).
      • Fix byte-compilation staleness (#60).
      • Remove option to set remote URLs (#64).
      • Set pushRemote and/or pushDefault when validating remotes (#65).
      • Move away from decapitation (#66).
  • Support pluggable recipe repositories (#30).
    • Support org-elpa (#36).
    • Support elpa externals-list (#18).
    • Figure out why profile-dotemacs doesn't show up in Emacsattic (#52).
    • Save versions of recipe repositories in lockfile (#26).
    • Use heuristics from borg.el to compute EmacsMirror recipes (#40).
    • Prefix argument should make straight-get-recipe prompt for recipe source (#62).
  • Improve performance (#9):
    • Add option to only rebuild packages when changed in Emacs (#41).
  • Improve use-package integration:
    • Make use-package-install-deferred-package work (upstream, see jwiegley/use-package#479).
    • Integrate registration-only package usage with use-package (#45).
  • Miscellaneous tasks:
    • Don't expose the internal arguments of straight-use-package (#46).
    • Add Travis to check byte-compilation (#19).
      • Run checkdoc on Travis (#75).
      • Check for long lines on Travis (#77).
    • Allow overriding a package's commit hash in your own lockfile (#67).
    • Neuter package.el (#73).
  • Add comprehensive documentation (#28, #51).
    • Add example configurations (#74).

Needs to self-manage

straight.el needs to manage itself as a package. Otherwise it remains unversioned in versions.el, and also pbl does not have its autoloads activated.

Add straight-override-package

Although the profile system allows for adding your own packages without putting them in other lockfiles, there is no way of overriding the revision of a package from another profile. This can be corrected with a new function straight-override-package, which will also allow for overriding the recipe ahead of installation time.

Eliminate pbl

Version control code should be self-hosted. We can drop support for non-Git VCS systems.

Make straight--set-head more robust

Currently, straight--set-head will just fail if you have unstaged changes. It should offer to do a hard reset, clean the working directory, and so on, if necessary.

Show entire dependency graph

Currently dependencies are not necessarily explained very well, since only the direct cause is reported (e.g. a dependency could cause MELPA to be cloned, and the message displayed is then unhelpful). I would like the whole chain to be shown.

Add straight-rebuild command

This would rebuild any packages that needed to be rebuilt. Handy if you're testing something like esup where the new instance of Emacs won't pick up your changes because it's bypassing the normal init process.

Add way to change recipe

Currently if you evaluate a use-package form and then change its recipe, you will just get an error because the recipe has changed. This is arguably correct but definitely annoying. There needs to be a way to handle this without resorting to mutating multiple undocumented internal hash tables.

Add option for shallow clones

Cloning Git repos can take a while. It would be nice to offer a config option to clone repositories shallowly by default.

Explicit support for forks

After #25, we may want to consider enhancing the Git support. In particular, I'd like explicit support for a fork-based workflow. Something like:

(straight-use-package
  '(use-package
    :repo (github . "raxod502/use-package")
    :upstream (github . "jwiegley/use-package")))

It would certainly be possible to automatically transform MELPA recipes into this style, so this is doable.

Accidentally introduced runtime dependency on package.el

We need package.el for package-built-in-p at runtime, so we know whether or not to signal an error due to a missing package. Unfortunately, this means we now have a runtime dependency on package.el. I think the most amusing way to solve this problem is to persistently cache the complete list of built-in packages, and update the cache whenever we detect that the output of M-x emacs-version has changed.

Add way to prune unused repositories

Over time, you can accrue a large number of unused Git repositories that were cloned at various points but are no longer used. I don't want to prune these (they might contain useful development history), but some people who don't modify their Emacs packages might.

Add concept of local versions.el files

I just realized that versions.el is going to have not only Radian's packages, but also the packages I declare in my local dotfiles. These need to be separate, so straight.el needs to have an idea of multiple package declaration sources, which can be stored in separate versions.el files.

Add Travis

Even if there are no unit tests or documentation yet, I would at least like to validate that there are no byte-compiler warnings.

Install even built-in packages

If a package depends on Org, it probably depends on the latest version, not whatever version is shipped with Emacs. Even if package.el insists a package is built-in, we should still try to install it. The arguably most correct solution would be to attempt to install all packages, but then only signal an error on missing dependencies if those dependencies are built-in. I'm tempted to just say that missing dependencies are not an error, given how loose the rest of dependency handling in straight.el is. But this is probably going too far.

Dependencies aren't saved when loading packages after init

I think this is a pretty simple problem but I don't currently have time to debug it.

If I evaluate a straight-use-package form after init, then the dependencies don't seem to get properly saved in the build cache, and so they are not activated the next time Emacs is started.

This could also be a problem with another Emacs instance overwriting the build cache. That is a problem that needs to be solved! Perhaps an intelligent merge could be done. Although, I think the build cache should be loaded and saved only for the evaluation, not on Emacs kill.

Record individual packages in bulk find(1) operation

Currently, if any packages have changed, we discard the results of our bulk find(1) operation (from straight--cached-packages-might-be-modified-p) and check each package individually. This is slower. It would be preferable to stick the results in a hash table so that we can skip checking all cached packages, even if some are modified.

Redundant warning on changing recipe

I got this:

Warning (straight): Packages "esup" and "esup" have incompatible recipes (:branch cannot be both "radian-1" and nil)
Warning (straight): Package "esup" has two incompatible recipes (:branch cannot be both "radian-1" and nil)

I think the first warning is superfluous.

Don't write build cache when init failed

Currently if there is an error during init, all the packages will be rebuilt next init because the build cache is written to disk (and not all of the packages had been enabled yet).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.