diff --git a/import_/import.go b/import_/import.go index 00ee923..bf3d945 100644 --- a/import_/import.go +++ b/import_/import.go @@ -125,7 +125,7 @@ func Import() { osmCache.Close() log.StopStep(step) if config.ImportOptions.Diff { - diffstate, err := state.FromPbf(config.ImportOptions.Read, config.BaseOptions.DiffStateBefore) + diffstate, err := state.FromPbf(config.ImportOptions.Read, config.BaseOptions.DiffStateBefore, config.BaseOptions.ReplicationUrl, config.BaseOptions.ReplicationInterval) if err != nil { log.Print("error parsing diff state form PBF", err) } else if diffstate != nil { diff --git a/update/state/state.go b/update/state/state.go index 548709c..1da40e9 100644 --- a/update/state/state.go +++ b/update/state/state.go @@ -13,7 +13,6 @@ import ( "strings" "time" - "github.com/omniscale/imposm3/config" "github.com/omniscale/imposm3/logging" "github.com/omniscale/imposm3/parser/pbf" ) @@ -78,7 +77,7 @@ func FromOscGz(oscFile string) (*DiffState, error) { return ParseFile(stateFile) } -func FromPbf(filename string, before time.Duration) (*DiffState, error) { +func FromPbf(filename string, before time.Duration, replicationUrl string, replicationInterval time.Duration) (*DiffState, error) { pbfFile, err := pbf.NewParser(filename) if err != nil { return nil, err @@ -94,18 +93,17 @@ func FromPbf(filename string, before time.Duration) (*DiffState, error) { timestamp = fstat.ModTime() } - replicationUrl := config.BaseOptions.ReplicationUrl if replicationUrl == "" { replicationUrl = "https://planet.openstreetmap.org/replication/minute/" } - seq := estimateSequence(replicationUrl, timestamp) + seq := estimateSequence(replicationUrl, replicationInterval, timestamp) if seq == 0 { return nil, nil } // start earlier - seq -= int(before.Minutes() / config.BaseOptions.ReplicationInterval.Minutes()) + seq -= int(math.Ceil(before.Minutes() / replicationInterval.Minutes())) return &DiffState{Time: timestamp, Url: replicationUrl, Sequence: seq}, nil } @@ -197,7 +195,7 @@ func currentState(url string) (*DiffState, error) { return Parse(resp.Body) } -func estimateSequence(url string, timestamp time.Time) int { +func estimateSequence(url string, interval time.Duration, timestamp time.Time) int { state, err := currentState(url) if err != nil { // try a second time before failing @@ -212,5 +210,5 @@ func estimateSequence(url string, timestamp time.Time) int { behind := state.Time.Sub(timestamp) // Sequence unit depends on replication interval (minute, hour, day). - return state.Sequence - int(math.Ceil(behind.Minutes() / config.BaseOptions.ReplicationInterval.Minutes())) + return state.Sequence - int(math.Ceil(behind.Minutes() / interval.Minutes())) } diff --git a/update/state/state_test.go b/update/state/state_test.go index 7f5ca8b..bac76c3 100644 --- a/update/state/state_test.go +++ b/update/state/state_test.go @@ -6,7 +6,7 @@ import ( ) func TestFromPBF(t *testing.T) { - state, err := FromPbf("../../parser/pbf/monaco-20150428.osm.pbf", time.Hour*1) + state, err := FromPbf("../../parser/pbf/monaco-20150428.osm.pbf", time.Hour*1, "", time.Minute*1) if err != nil { t.Fatal(err) }