What is new?

Shared packages

Remember the local network sources functionality? That feature is awesome if it works, but really bad if it doesn't. There are multiple challenges with this feature;

  • How to ensure that computers know about each other.
  • How to actually use another computer as a source.

To ensure that computers knows about each other, we first used network scanning by pinging computers in the current network range. This was unreliable, and slow. Then we tried to use the ARP table, and that was fast, but not reliable at all.

TL; DR: Multicast is used to discover computers in the network, which is both fast and reliable.

To use another computer as a source was not easy either. First, we sent files between clients with socket connections, but that did not work for packages with dependencies. Then we automated a SMB net share, that shared the choco lib. That worked sometimes, but the problem is that SMB net share is kind of hard to automate. Port should be open, authentication, sessions, and on and on.

TL; DR: Every computer has a local nuget server that shares packages with other computers. The local nuget server is protected with authentication. Chocolatey can use that as a source and resolve dependencies. No more SMB net share.

 

Bug fixes

  • Internal Nuget server fix for handling package inventory correct (IsAbsoluteLatestVersion and IsLatestVersion).
  • Internal Nuget server fix that handles the filter correct (related to IsPrerelease).
  • Internal Nuget server now includes dependencies when generating packages and uploading .nupkg, which was not implemented before.
  • Calendar on group package page did not work properly, but is fixed.


Performance

  • New DB optimizations that keep it fast.
  • When computer connects to the server, it gets all the packages, but now, packages that has the status "uninstall" and "done" are filtered out before sending.
  • New option in global settings: removeOldUninstallCommands - this option removes uninstalled packages that are more than one year old on server startup.
  • The server was broadcasting data to other computers when it was not necessary, and are now less "chatty".