Added enable_git_lfs flag for repositories

This commit is contained in:
Gavin Bunney
2019-10-17 13:32:17 -07:00
parent bf6be8c739
commit 3cc9bb1285
3 changed files with 91 additions and 9 deletions

View File

@@ -67,6 +67,11 @@ func resourceRepository() *schema.Resource {
Optional: true,
Default: false,
},
"enable_git_lfs": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"clone_ssh": {
Type: schema.TypeString,
Computed: true,
@@ -112,12 +117,18 @@ func resourceRepositoryUpdate(d *schema.ResourceData, m interface{}) error {
return err
}
err = handleRepositoryGitLFSChanges(client, project, repoSlug, d)
if err != nil {
return err
}
return resourceRepositoryRead(d, m)
}
func resourceRepositoryCreate(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketServerProvider).BitbucketClient
repo, project := newRepositoryFromResource(d)
repoSlug := determineSlug(d)
bytedata, err := json.Marshal(repo)
@@ -135,16 +146,48 @@ func resourceRepositoryCreate(d *schema.ResourceData, m interface{}) error {
d.SetId(string(fmt.Sprintf("%s/%s", project, repo.Name)))
err = handleRepositoryGitLFSChanges(client, project, repoSlug, d)
if err != nil {
return err
}
return resourceRepositoryRead(d, m)
}
func handleRepositoryGitLFSChanges(client *BitbucketClient, project string, repoSlug string, d *schema.ResourceData) error {
enableGitLFS := d.Get("enable_git_lfs").(bool)
if (d.IsNewResource() && enableGitLFS) || d.HasChange("enable_git_lfs") {
if enableGitLFS {
_, err := client.Put(fmt.Sprintf("/rest/git-lfs/admin/projects/%s/repos/%s/enabled",
project,
repoSlug,
), nil)
if err != nil {
return err
}
} else {
_, err := client.Delete(fmt.Sprintf("/rest/git-lfs/admin/projects/%s/repos/%s/enabled",
project,
repoSlug,
))
if err != nil {
return err
}
}
}
return nil
}
func resourceRepositoryRead(d *schema.ResourceData, m interface{}) error {
id := d.Id()
if id != "" {
idparts := strings.Split(id, "/")
if len(idparts) == 2 {
d.Set("project", idparts[0])
d.Set("slug", idparts[1])
_ = d.Set("project", idparts[0])
_ = d.Set("slug", idparts[1])
} else {
return fmt.Errorf("incorrect ID format, should match `project/slug`")
}
@@ -177,21 +220,27 @@ func resourceRepositoryRead(d *schema.ResourceData, m interface{}) error {
return decodeerr
}
d.Set("name", repo.Name)
_ = d.Set("name", repo.Name)
if repo.Slug != "" && repo.Name != repo.Slug {
d.Set("slug", repo.Slug)
_ = d.Set("slug", repo.Slug)
}
d.Set("description", repo.Description)
d.Set("forkable", repo.Forkable)
d.Set("public", repo.Public)
_ = d.Set("description", repo.Description)
_ = d.Set("forkable", repo.Forkable)
_ = d.Set("public", repo.Public)
for _, clone_url := range repo.Links.Clone {
if clone_url.Name == "http" {
d.Set("clone_https", clone_url.Href)
_ = d.Set("clone_https", clone_url.Href)
} else {
d.Set("clone_ssh", clone_url.Href)
_ = d.Set("clone_ssh", clone_url.Href)
}
}
gifLFS, err := client.Get(fmt.Sprintf("/rest/git-lfs/admin/projects/%s/repos/%s/enabled",
project,
repoSlug,
))
_ = d.Set("enable_git_lfs", err == nil && gifLFS.StatusCode == 200)
}
return nil

View File

@@ -71,6 +71,38 @@ func TestAccBitbucketRepository_namewithspaces(t *testing.T) {
})
}
func TestAccBitbucketRepository_gitlfs(t *testing.T) {
var repo Repository
key := fmt.Sprintf("%v", rand.New(rand.NewSource(time.Now().UnixNano())).Int())
testAccBitbucketRepositoryConfig := fmt.Sprintf(`
resource "bitbucketserver_project" "test" {
key = "TEST%v"
name = "Test%v"
}
resource "bitbucketserver_repository" "test_repo" {
project = bitbucketserver_project.test.key
name = "test-repo-for-repository-test"
enable_git_lfs = true
}
`, key, key)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckBitbucketRepositoryDestroy,
Steps: []resource.TestStep{
{
Config: testAccBitbucketRepositoryConfig,
Check: resource.ComposeTestCheckFunc(
testAccCheckBitbucketRepositoryExists("bitbucketserver_repository.test_repo", &repo),
),
},
},
})
}
func testAccCheckBitbucketRepositoryDestroy(s *terraform.State) error {
client := testAccProvider.Meta().(*BitbucketServerProvider).BitbucketClient
rs, ok := s.RootModule().Resources["bitbucketserver_repository.test_repo"]