Fix bug #1331744, properly handle interface types.

If you have a typed interface (type foo interface{stuff}), but you end
up returning that object via the empty interface (interface{}), it strips
the knowledge about the original interface, and reflect.ValueOf() cannot
create values that point to those types. However, you can play tricks with
reflect.New().Elem().Set() to get a reflect.Value that holds the interface
rather than holding the original object.

The bug was that we were looking up the methods on the original signature,
(which in this case was an interface), and then using the method.Index to
call a function on the concrete type. This worked everywhere so far, because
everything that was returning via an interface only had public methods that
matched that interface exactly, and golang-go sorts methods so they all
lined up.
However, gccgo sorts differently, and private methods can come before the
public ones, and then you notice that the offsets are different.
I added a test that creates 2 implementations that have a different number
of methods, so we know that they will not be in the same positions, and
it properly fails if we don't wrap our obj into the right interface
reflect.Value object.
Make ensure-availability a bulk API call.
don't recover the panic just to panic again
Merge pull request #115 from tasdomas/ensure-availability-bulk-api

Make ensure-availability a bulk API call.

Makin ensure-availability a bulk API call.
Switch backup to return a base64 encoded sha1 hash instead of a hex-encode sha 256
Merge pull request #129 from jameinel/api-and-interface-types-1331744

Fix bug #1331744, properly handle interface types.

If you have a typed interface (type foo interface{stuff}), but you end
up returning that object via the empty interface (interface{}), it strips
the knowledge about the original interface, and reflect.ValueOf() cannot
create values that point to those types. However, you can play tricks with
reflect.New().Elem().Set() to get a reflect.Value that holds the interface
rather than holding the original object.

The bug was that we were looking up the methods on the original signature,
(which in this case was an interface), and then using the method.Index to
call a function on the concrete type. This worked everywhere so far, because
everything that was returning via an interface only had public methods that
matched that interface exactly, and golang-go sorts methods so they all
lined up.
However, gccgo sorts differently, and private methods can come before the
public ones, and then you notice that the offsets are different.
I added a test that creates 2 implementations that have a different number
of methods, so we know that they will not be in the same positions, and
it properly fails if we don't wrap our obj into the right interface
reflect.Value object.
Adding a comment
Switch to Digest header for sending download hash
Merge pull request #130 from voidspace/backup-header

Switch backup download to Digest header

apiserver/backup: switch the http header to the RFC 3230 Digest header

The backup download api sends an sha hash as a header. RFC 3230
defines a standard for this header, using a base64 encoded SHA1 hash.
Added the @ syntax for reading individual service configuration values out of files.
Merge branch 'master' of https://github.com/juju/juju into set-add-at-syntax
Add ActionWatcher on state
Added some help information.
Add ok check for interface{} --> string type assertion
Add tests for coalescing added actions, and excluding removed actions
Merge pull request #128 from johnweldon/action-watcher

Add ActionWatcher on state

First part of adding Action Watchers. Start with state package and will move on to api and apiserver packages next.
Added file size limit of 5M.
Merge branch 'master' of https://github.com/juju/juju into set-add-at-syntax
Merge pull request #131 from TheMue/set-add-at-syntax

Add @ syntax to set command

Added the @ syntax to the set command for setting service options. It allows that the value for an option can be read out of a file:

juju set myservice myoption=@valuefile.txt

See also

https://bugs.launchpad.net/juju-core/+bug/1216967