grim/youtrack-import
Clone
Summary
Browse
Changes
Graph
Handle comments that end up with no text after processing. This typically happens if it was a reply with the body removed
draft
2020-08-04, Gary Kramlich
45baf35db295
Handle comments that end up with no text after processing. This typically happens if it was a reply with the body removed
package
trac
import
(
"fmt"
"io/ioutil"
"net/url"
"path/filepath"
"strings"
"github.com/go-ini/ini"
"github.com/jmoiron/sqlx"
_
"github.com/lib/pq"
)
const
(
_VERSION
string
=
"Trac Environment Version 1"
)
type
environment
struct
{
path
string
cfg
*
ini
.
File
db
*
sqlx
.
DB
}
func
NewEnvironment
(
path
string
)
(
*
environment
,
error
)
{
e
:=
&
environment
{
path
:
path
,
}
var
err
error
if
err
=
e
.
checkVersion
();
err
!=
nil
{
return
nil
,
err
}
if
err
=
e
.
loadConfig
();
err
!=
nil
{
return
nil
,
err
}
driver
,
options
,
err
:=
e
.
parseDatabase
()
if
err
!=
nil
{
return
nil
,
err
}
db
,
err
:=
sqlx
.
Connect
(
driver
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
e
.
db
=
db
return
e
,
nil
}
func
(
e
*
environment
)
close
()
error
{
return
e
.
db
.
Close
()
}
func
(
e
*
environment
)
checkVersion
()
error
{
versionFile
:=
filepath
.
Join
(
e
.
path
,
"VERSION"
)
data
,
err
:=
ioutil
.
ReadFile
(
versionFile
)
if
err
!=
nil
{
return
err
}
contents
:=
string
(
data
)
contents
=
strings
.
TrimSpace
(
contents
)
if
contents
!=
_VERSION
{
return
fmt
.
Errorf
(
"Unknown trac version %q"
,
contents
)
}
return
nil
}
func
(
e
*
environment
)
loadConfig
()
error
{
cfg
,
err
:=
ini
.
Load
(
filepath
.
Join
(
e
.
path
,
"conf"
,
"trac.ini"
))
if
err
!=
nil
{
return
err
}
e
.
cfg
=
cfg
return
nil
}
func
(
e
*
environment
)
parseDatabase
()
(
string
,
string
,
error
)
{
dbUrl
:=
e
.
cfg
.
Section
(
"trac"
).
Key
(
"database"
).
String
()
uri
,
err
:=
url
.
Parse
(
dbUrl
)
if
err
!=
nil
{
return
""
,
""
,
err
}
switch
uri
.
Scheme
{
case
"postgres"
:
qs
:=
uri
.
Query
()
// at some point, schema got removed, but you can get the same effect
// by using search path
if
_
,
found
:=
qs
[
"schema"
];
found
{
qs
.
Add
(
"search_path"
,
qs
.
Get
(
"schema"
))
qs
.
Del
(
"schema"
)
}
uri
.
RawQuery
=
qs
.
Encode
()
return
"postgres"
,
uri
.
String
(),
nil
default
:
return
""
,
""
,
fmt
.
Errorf
(
"Unknown database %q"
,
uri
.
Scheme
)
}
}