grim/youtrack-import
Clone
Summary
Browse
Changes
Graph
Use the built in mime stuff to figure out the content type for attachments
2020-01-14, Gary Kramlich
4763018b25c8
Use the built in mime stuff to figure out the content type for attachments
package
youtrack
import
(
"encoding/xml"
"fmt"
"net/http"
)
type
VersionField
struct
{
Released
bool
`xml:"released,attr"`
Archived
bool
`xml:"archived,attr"`
Description
string
`xml:"description,attr"`
ReleaseDate
int64
`xml:"releaseDate,attr"`
Name
string
`xml:",cdata"`
}
type
VersionFieldBundle
struct
{
XMLName
xml
.
Name
`xml:"versions"`
Name
string
`xml:"name,attr"`
Versions
[]
VersionField
`xml:"version"`
}
func
(
c
*
Client
)
GetProjectVersions
(
projectID
string
)
(
*
VersionFieldBundle
,
error
)
{
pcf
,
err
:=
c
.
GetProjectCustomField
(
projectID
,
"Affected versions"
)
if
err
!=
nil
{
return
nil
,
err
}
name
,
err
:=
pcf
.
GetBundleName
()
if
err
!=
nil
{
return
nil
,
err
}
return
c
.
GetVersionFieldBundle
(
name
)
}
func
(
c
*
Client
)
GetVersionFieldBundle
(
name
string
)
(
*
VersionFieldBundle
,
error
)
{
resp
,
err
:=
c
.
request
(
http
.
MethodGet
,
c
.
uri
+
"/admin/customfield/versionBundle/"
+
name
,
nil
,
)
if
err
!=
nil
{
return
nil
,
err
}
defer
resp
.
Body
.
Close
()
if
err
:=
c
.
checkStatus
(
resp
,
http
.
StatusOK
);
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get versionBundle: %v"
,
err
)
}
bundle
:=
&
VersionFieldBundle
{}
return
bundle
,
xml
.
NewDecoder
(
resp
.
Body
).
Decode
(
bundle
)
}
func
(
c
*
Client
)
AppendVersionFieldBundle
(
name
,
value
string
)
error
{
resp
,
err
:=
c
.
request
(
http
.
MethodPut
,
c
.
uri
+
"/admin/customfield/versionBundle/"
+
name
+
"/"
+
value
,
nil
,
)
if
err
!=
nil
{
return
err
}
defer
resp
.
Body
.
Close
()
if
err
:=
c
.
checkStatus
(
resp
,
http
.
StatusCreated
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to append %q to %q: %v"
,
value
,
name
,
err
)
}
return
nil
}
func
(
c
*
Client
)
CreateVersions
(
p
*
Project
)
error
{
bundle
,
err
:=
c
.
GetProjectVersions
(
p
.
ID
)
if
err
!=
nil
{
return
err
}
// create a map of the existing versions
existing
:=
map
[
string
]
bool
{}
for
_
,
version
:=
range
bundle
.
Versions
{
existing
[
version
.
Name
]
=
true
}
// now run through the version slice and add all the versions
for
_
,
version
:=
range
p
.
Versions
{
fmt
.
Printf
(
"creating version %q ... "
,
version
)
if
_
,
found
:=
existing
[
version
];
found
{
fmt
.
Printf
(
"already exists.\n"
)
continue
}
if
err
:=
c
.
AppendVersionFieldBundle
(
bundle
.
Name
,
version
);
err
!=
nil
{
fmt
.
Printf
(
"failed.\n"
)
return
err
}
fmt
.
Printf
(
"done.\n"
)
}
return
nil
}