Giter Site home page Giter Site logo

openwrap's Introduction

OpenWrap

OpenwWrap is a pacakge manager for .net.

To get started, read the QuickStart or go to the Homepage.

openwrap's People

Contributors

andrewdavey avatar anthonysteele avatar colincasey avatar dirv avatar flq avatar haf avatar half-ogre avatar konrad-kruczynski avatar petejohanson avatar ryansroberts avatar serialseb avatar tripleemcoder avatar vokhotnikov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openwrap's Issues

Support edge versions of packages

Packages are all included in repositories. Some packages must be marked as "edge" packages, and only usable when such a tag is applied to the dependency import.

It would be nice to have this as a generalized mechanism along the lines of the namespace support in C#.

For example:
nhibernate-3.0.0.1.wrap
namespace: edge

and in your consumer:
depends: edge/nhibernate

and the command-line
add-wrap nhibernate -namespace edge

This would also allow complete distributed categorization of content, letting you only import pacakges you're happy to search for.

wrap remove: Remove wrap from system repository

remove-wrap does not remove packages from the system repository. Need to have a -system.

removes all versions of a package present in the system repo:
remove-wrap package -system

removes a specific version of a pacakge in the system repo:
remove-wrap package -system -version

VS caches msbuild tasks

VS caches msbuild tasks, which in turns caches the version of an assembly at the moment a project was loaded. Need to force a refresh of dependencies when a rebuild occurs.

Web repositories use a local cache for index download

Currently, remote repositories are contacted on each request, retrieving the whole list. Need to persist the index in the OpenWrap system folder, together with LastModifiedDate for the file.

The web repositories should then be updated to use the cache version, and in parallel issue a conditional get to update it. If an update is available, a message should be issued to the user to let him know that re-issuing the command may have updated packages. Alternatively, issue the http request with a low timeout and ocnditional get per-request, and simply fall-back on cache when connection fails, or use network location-like systems to "know" if openwrap is live or not.

Refactor commands to IPackageManager

Either IPackageManager needs to get a more general API, and logic in wrap commands be moved, or that logic needs to be extracted to a different abstraction. The existing code has too many moving parts.

Dependency overriding

allow aliasing of dependencies to custom builds, like:

override nhibernate2.1 nhibernate2.1-custom

Warn when dependencies conflict with the GAC

If an assembly is in a package one takes a dependency on, and that assembly is in the GAC, there should be a big warning, maybe with an offer to remove the assembly from the GAC (MVC anyone?)

Support for NuPack repository and package format

Support NuPack atom feed format as a read-only package source, and a package format converter to convert a NuPack package to OpenWrap on the fly.

This could be also implemented as a convert-legacypackage blah.nupack blah.wrap command

customizing of remote repositories list

Remote repositories currently only point to an arbitrary location. Need to make the list extensible, which requires:

  • o wrap server -add
  • o wrap server -remove
  • o wrap server -list (default)
  • A way to store personal settings in the existing OpenWrap system repositories. In this case, a simple list of URIs following the text/uri-list media type should be enough, stored in a .servers file.

help get: Provide a list of commands and per-command input descriptions

The help command is pretty much useless at this stage. It needs to be expanded with, for each command, a name, a description, and automatically try and locate resource-based "documentation" based on command name / parameter, falling back on the attribute value when it's missing (so localization is doable easily later on).

Command parser doesn't process CamelCase and shortened properties

Currently, command parameters are only read in full.

The command-line parsing should support shortening both on CamelCase and on shortened parameter names.

given command parameter HasCommand
when parsing the parameter with examples (-HasCommand, -hc, -hasc)
then command parameter is assigned

alternative command name syntax

Current commands are called by using name verb, should also support the verb-name notation.

e.g.
o wrap install
and
o install-wrap

Platform compatibility tables are extensible in configuration

Platform compatibility (aka which platform can consume which assemblies and in which order in the /bin exports) is currently fixed. It would be immensely useful to refactor that code to make it changeable in one place in the codebase, so silverlight / mono / cf profiles could be added easily.

Support a publish mechanism that expects a HREF

It would be ideal if we could publish a wrap and rather than expecting an upload it expected a href.
This would provided simpler support for distributed package storage with an eye on using the GitHub "Releases" mechanism for storing wraps along side source code.

wrap set: Update a wrap dependency in the project repository

When a wrap is already part of a descriptor, set-wrap lets the descriptor be updated:

set-wrap package -content [true|false]
sets or unsets the content flag

set-wrap package -anchored [true|false]
sets or unsets the anchored flag

set-wrap package [-minimumVersion x.x.x] [-maximumVersion x.x.x] [-version x.x.x] [-anyVersion]
min and max can be used together, version sets the exact version, anyVersion removes need to specify version
For new contributors, versions are added by adding VersionVertex classes.

Order remote wrap repositories

The list of remotes is not relevant right now.

The remotes need to be prioritized so one can choose which repository is probed first.

The list-remote should present the current 1-based index when rendering. Changing the order should be done by a new command:
set-remote remotename -position 1

wrap add: use -minversion -maxversion -version -anyversion

add-wrap uses -version at the moment to specify a version string (< 2.1 and >= 2.0). Command-line tools don't support those characters easily.

Replace by -version (for exact version), -minversion, -maxversion (can be used together), -anyversion.

When package already part of the dependency, update the dependency rather than error out.

Pre-openwrap dependencies loaded carelessly

OpenWrap doesn't currently respect dependnecy management on entrypoints (ConsoleRunner / Initalize build task, etc). Need to refactor the assembly loading code to support using a "driver" for finding files, and pre-load openwrap dependencies before anything else runs.

Replace the Version class use by a custom PackageVersion type

The Version class does not support wildcard, which we use. Other package formats (such as semantic package versioning) support tagged versions (1.0.0beta) which is something we may consider in the future.

Replacing the code with a custom VersionDeclaration type with proper ToString, operator overloading and equality would make the code much better and provide for future extensibility more easily.

Anchoring support for dependencies

By default, dependencies live in /wraps/cache/packagename-1.0.0/. The problem is that, while cache should never be checked-in, some packages have content that are needed, in a version-independent way, for a fresh pull to function.

The main example is openwrap itself, where all references end up probing the cache folder.

The design for anchoring provides for an extension to the dependency language
depends nhibernate = 2.0 anchored

When such dependency is defined, a few things happen:

  • A symlink is created between /wraps/cache/nhibernate-2.0 and /wraps/anchored/nhibernate. This will ensure that the folder is checked-in as files.
  • When a package is opened, a check is made to ensure that the folder /wraps/anchored/nhibernate is indeed a symlink and not files. If it is files (aka a fresh copy was just pulled from source control), the folder is deleted and the symlink is re-established

Implementing this requires using junctions on ntfs drives, and some way of doing this on mono, with a fallback for FS that don't support them. To achieve that, a junction-like API should be created, with a default implementation that keeps files in sync with the master. Then implementations can be swapped-in based on platforms.

Resharper 5 integration

The resharper integration module (that lets resharper be notified of pending assembly updates) is built for resharper 4.5.

A version for 5.0 needs to be compiled against the 5.0 assemblies. Ideally, the code would detect which version to use based on the state of the vs process upon load.

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.