6176b9ffbc
--- type: change description: |- add change_description field to credential commits This also involved changing how commit range change fingerprints are handled, so that the description can be more variable, and using that flexibility to allow the cli tool the ability to ask for the change description prior to creating a credential commit. Credential commit creation via the cli tool has been further improved in that it will check if it's been told to make a cred based on a specific credential commit, and if so just append the new credential and re-commit, speeding things up a bit for everyone. fingerprint: AGWXqPM1Lxf3kvV/V3w65jNiUQyrQfemqfCcImSWjHJl credentials: - type: pgp_signature pub_key_id: 95C46FA6A41148AC body: iQIzBAABAgAdFiEEJ6tQKp6olvZKJ0lwlcRvpqQRSKwFAl68xrgACgkQlcRvpqQRSKx6Ng//Qm/8dCqBe/8R7KgzW2naP352jegW5m9KoIMrVsm1kmgQfAGYs0easnks1+DadD79TEUacTrPYxDR50eScU58uybRUPPbJLXLjdoSbUYCl9bSdr6LVlZF9GVcMbH4iWhTN3YGQFHX7pEqwJ9Qzw/pbheCGPkS3KJFJZ3tC+TVM7QysdkGpxlKn8GiSIfN3d4QaHWFJW9FOc1K4mAFfmM/5QqU5j5OydlLeScJu+na7B8Lcmy4Jz+mdwIZCMG9h4qv1qD0/XcsY8Wv6cptMIBUZgg2SIyrl0KDau8pHX45PHlAaViCjzW2LjU2wMn+zKX6s3hSWje5sE95Z1a7l0ubytHGKUdlfTQDnkVYzs9hCqv3iAERChGl6E1qQWSNQMhhUcwVsZ7+Iw2M6ESrP/MvdsdO+N0t2oakbJnzUliGx8pQcY4DJPaosUadLqwKPMYiBOiSsfN2e+Vw2ZOoiHL2QUEd2VV1JfImZBl5oLFhzuLfR6h+eMkwcHjs+rtgMEh9TnA6qVzn7BzZ9p1ZFBHlw3Yrx22tG2Ehri4eMPa+5+vcuG7xlSlq4FOGvANi3E3lieeIiE61EztoX3iXeY4bdtaFlMEk6i+JU3jHdwXd006Kv0/5jd7n+OAba8aYjthNN2WuhTxj2/VSKn9iPjaCD3GJtkFQajf57v2nbK0QDx4= account: mediocregopher
83 lines
2.7 KiB
Go
83 lines
2.7 KiB
Go
package dehub
|
|
|
|
import (
|
|
"errors"
|
|
)
|
|
|
|
// PayloadCredential describes the structure of a credential payload.
|
|
type PayloadCredential struct {
|
|
// CommitHashes represents the commits which this credential is accrediting.
|
|
// It is only present for informational purposes, as commits don't not have
|
|
// any bearing on the CredentialedHash itself.
|
|
CommitHashes []string `yaml:"commits,omitempty"`
|
|
|
|
// ChangeDescription represents the description which has been credentialed.
|
|
// This field is only relevant if the Credential in the payload is for a
|
|
// change set.
|
|
ChangeDescription string `yaml:"change_description"`
|
|
}
|
|
|
|
var _ Payload = PayloadCredential{}
|
|
|
|
// NewPayloadCredential constructs and returns a PayloadUnion populated with a
|
|
// PayloadCredential for the given fingerprint. The Credentials of the returned
|
|
// PayloadUnion will _not_ be filled in.
|
|
func (proj *Project) NewPayloadCredential(fingerprint []byte) (PayloadUnion, error) {
|
|
return PayloadUnion{
|
|
Credential: &PayloadCredential{},
|
|
Common: PayloadCommon{Fingerprint: fingerprint},
|
|
}, nil
|
|
}
|
|
|
|
// NewPayloadCredentialFromChanges constructs and returns a PayloadUnion
|
|
// populated with a PayloadCredential. The fingerprint of the payload will be a
|
|
// change fingerprint generated from the given description and all changes in
|
|
// the given range of Commits.
|
|
//
|
|
// If an empty description is given then the description of the last change
|
|
// payload in the range is used when generating the fingerprint.
|
|
func (proj *Project) NewPayloadCredentialFromChanges(descr string, commits []Commit) (PayloadUnion, error) {
|
|
info, err := proj.changeRangeInfo(commits)
|
|
if err != nil {
|
|
return PayloadUnion{}, err
|
|
}
|
|
|
|
if descr == "" {
|
|
descr = info.changeDescription
|
|
}
|
|
fingerprint, err := info.changeFingerprint(descr)
|
|
if err != nil {
|
|
return PayloadUnion{}, err
|
|
}
|
|
|
|
payCred, err := proj.NewPayloadCredential(fingerprint)
|
|
if err != nil {
|
|
return PayloadUnion{}, err
|
|
}
|
|
|
|
payCred.Credential.ChangeDescription = descr
|
|
for _, commit := range info.changeCommits {
|
|
payCred.Credential.CommitHashes = append(
|
|
payCred.Credential.CommitHashes,
|
|
commit.Hash.String(),
|
|
)
|
|
}
|
|
|
|
return payCred, nil
|
|
}
|
|
|
|
// MessageHead implements the method for the Payload interface.
|
|
func (payCred PayloadCredential) MessageHead(common PayloadCommon) string {
|
|
return "Credential of " + common.Fingerprint.String()
|
|
}
|
|
|
|
// Fingerprint implements the method for the Payload interface.
|
|
func (payCred PayloadCredential) Fingerprint(changes []ChangedFile) ([]byte, error) {
|
|
if len(changes) > 0 {
|
|
return nil, errors.New("PayloadCredential cannot have any changed files")
|
|
}
|
|
// a PayloadCredential can't compute its own fingerprint, it's stored in the
|
|
// common.
|
|
return nil, nil
|
|
}
|