Merge pull request #1568 from calmh/override

Override needs to twiddle the version a bit more (fixes #1564)
This commit is contained in:
Audrius Butkevicius committed 2015-04-07 11:13:43 +01:00
commit 5f6a8fdc20
4 files changed
+227 -4

No files matched your search

+1 -1
View File
@@ -257,7 +257,7 @@
</table>
</div>
<div class="panel-footer">
<button class="btn btn-sm btn-danger pull-left" ng-if="folder.readOnly && model[folder.id].needFiles > 0" ng-click="override(folder.id)" href=""><span class="glyphicon glyphicon-upload"></span>&emsp;<span translate>Override Changes</span></button>
<button class="btn btn-sm btn-danger pull-left" ng-if="folderStatus(folder) == 'idle' && folder.readOnly && model[folder.id].needFiles > 0" ng-click="override(folder.id)" href=""><span class="glyphicon glyphicon-upload"></span>&emsp;<span translate>Override Changes</span></button>
<span class="pull-right">
<button class="btn btn-sm btn-default" href="" ng-show="folderStatus(folder) == 'idle'" ng-click="rescanFolder(folder.id)"><span class="glyphicon glyphicon-refresh"></span>&emsp;<span translate>Rescan</span></button>
<button class="btn btn-sm btn-default" href="" ng-click="editFolder(folder)"><span class="glyphicon glyphicon-pencil"></span>&emsp;<span translate>Edit</span></button>
+2 -2
View File
@@ -5,7 +5,7 @@ import (
)
const (
AssetsBuildDate = "Mon, 06 Apr 2015 18:53:10 GMT"
AssetsBuildDate = "Mon, 06 Apr 2015 21:33:06 GMT"
)
func Assets() map[string][]byte {
@@ -75,7 +75,7 @@ func Assets() map[string][]byte {
assets["assets/lang/valid-langs.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/ypLLFIoS8zJTPFJzEsvVrBViFZKSlXSUUpKBxLJiSCiGEikgMRSc0BEHpjQdXcC0SC5tCIgkVEKJDJLgEQOiMhLAhEg9Xkg9QUgVkGJrlMQhA4IAdJFIC3FZUCiBGRCaTaQqMrQdfaD0CHhSrFcAAAAAP//AQAA//+S0NbanwAAAA==")
assets["index.html"], _ = base64.StdEncoding.DecodeString("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 truncated
assets["index.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+x923bbRrbge76izG5H0iyRtHPxmaNI6pElu6P4prHs9GQymV5FoEiWBQIwChDNKDp/NE/zOm9nzX+dvesCFO4ASSk+6c5asQigLrt2Ve177Tp8cPbm9N1PF8/IPF54x18cPhgOvxiPyWkQriI+m8dk93SPfPXo8Tfk3ZyRy5XvxHPuz8hJEs+DSIygMJZ/N+eCXAZJ5DCo6zLyPIgWBN6JZPKBOTGJAxJDAzGLFoIEU/nwKviVex4lF8nE4w4285I7zBdsn1yPyFejRyNyPiWUOABMWufiJVlSQfwgJi4XccQnScxcsuTxHApAj1PusX1s7KcgIQ71STCJKYc/PiM0hnHG4cF4vFB9j4JoNoY2x9DbePTFF8Mh4ABRQTzqz44GzB8QfzakYXg0EGbw8pUT+HEUeB6LjgYpWk7TlwPieFSIowEW9QJ6NcCGGXWPvyDkcMFiGNacRoLFR4Mkng7/6yD7gCAO2ceEXx8N/sfw/cnwNFiENOYTj0Gz0AXzodb5syPmzphVz6cLdjS45mwZBlFsFV1yN54fuewa0DuUD/uE+zzm1BsKh3rs6PHoUakhlwkn4mHMA99qq1SMypVQKuFx/4pEzAO8wefYSWLCHWxpHrEp1BIwdDHmi9l4Sq/xyygEzB5/gXVjHnvsOFtsv5GbG5zbMzmC19Dt7t7t7eFYlUt7Uy1fM98NovEkCGJYHjQcO0JkT6MF90fwZqBhi1ceE3PG4kGxHQ3hFIY1jgBHS7rqVRG7Da5ZFHFAZF3Nw7FaE18cTgJ3JVty+XVxfT2DMcXW2jo+HEMphSvYsORdEJIJjQiuXnzn0+t0+dFr/KL+DGMoqH+6bEoTD1YJtMlkOT6jcq4RCg2HbgRhgS2EPctv8FWEsLNyfQwnEfVdgA3m1HzxglkwICJychOOb4ewKPiv2K43EtewpeYMyc3R4OuvBkSt18Hjx/8yGMNYsa+047DQa8w+wabmrsv84SehtqYqcLOjX4vFzkESziLqsnN/GpAvvyTW48hnSxbdDo6r11iY9px4VtcGjdZPSS9TDMk1gdBwWBJtvVu1oB5QtDjwSbwKYWLUQ0pOJrFv+sOf8P8wjPiCRiv5WyzMBtOY4M5V2v3uXq6fwizOvFU4x41I0l9DZ86uI/ibhAMzD1+yhQi/q2gGdpcvPBqz7NfwmnoJ/MsiAQsLZuTGHjmWEPEtYP69egvrmNw81KUf3uYnXnY0VtiwcDz2eB7jejRuFIRusATEISFP6IwNBfOAEx23V8l1STU+/zQoloPdNJshSXZpTPWD3Uo7dgNY9zTidOjRCZKGZy6PU0QfjmkOkGz5pQAsmJ8UpxQGl8JsrwEGbV+yOAZ6KnAhdIIuP+mFeT42zVkA55HbCBB31VbrBMzHyAGpog2eebAk52dt4KRo5NdAmiU17Qy0mCcxor4T0MF02gqxam49DEawfWgUd4IFKkPxeQs8b1WLd4lBOgmSbiADZ4ziIVuE8aoF7BNsswHow3HiVdOM7ItmqfgD6KviozUsUJVHxntBfeYdEI028poxF2RRzYYzXo4s4AG0MOWzcx/FmpSWRMEy46m57rzhwh0+/srmJ9b3EDsm8t/hkkY+l7KTNeJiWcSmK0sdzr/Of5FSVIf5YJ/g40LKCEPBZ35GqapXkUZHOi/zr49TJNfDiXJQkaaFVuOohihUJpGEhcxBHZgw5hNBrwH7wCKkdkCdmF9DDXdkqS2LRMRE7xvUSUwhqVsAK843PbLYf26N1IM/BUGzwM87cHTFuuUfLZeRMPE8LVLc65YvctjSyvRgW075p0HFZOZf5B6th0x4ze+i14B+xRLKOyhiIaMgHe4qJWafMBSJ90CLIerNW4ZqJsyZ+D33Vh5rNRstVwiKAQn1Yzl3UpCQMhNqXzgsxHL6vWYGM7yVJSbENuy7fmu4cguWwBYL6nkgNKupGMV8wUBRgyGwg8H3B4vFAWo8t7cHAJQsWarfLDSq8aPMqGcY2hqUSlHXhTUuZDEFB+JwpF9jlWK/xKyxm4eq3Ye3ZPfmoa7x8HaPLKkfCyQOgHIfFtWInLiuJA6qwl+qRlJE+np0g2S7q3YDWoShhFNNZ6opi0gchwmRY8auC6tHIeT8TG+uTqLNVRtLdt1GktIGrAtSO1pRLHlx5geR3ufMyI7dIY7YArTxFqjPZR+bAW706gxyl4sFF1qzTAlVD9hxb7VA/hL+iZqJ+B2Q6+eBB/JfA7m+YiubVk9l+WpaDWwZX3+WJLtdVnXdwXEV+S0TOiMPKlyIny2ypV79MjjOcNurzaYmL+c0Yg2N/mH4hDTdTLlvSISFDL3j9ipZicJUkZOot9WMxOIgKc8QEs261uDmofr18HYwKo5ruxOrTN/y3V+2tw4N42to+D8Rq1OL/8R3Jcp2SwPeJ+W1MuiEp9LS2CYDLS2cddhSBUbkUlU4+RuP5+Xt0gEr94wUOXHbREs9t36eZ1Ud8bLGoHsy907D3jqvD+JKtQyXAIuiIHrJBSilI4/5s3hOjsmjP7aFQ+FjK5YNS1oCTKKQZCEUYdbsE95W806LdZKbm2nEme96K7WbxS5Wkw3mnRnVi2QL1oyMZJP2rSZZwDOErptJupU+vHnxe9oxnvNIWpdmiUcjgiJtfsPkdoRpT1ZU4oIHc0520UfnsSkIzGntyp3zpGnjDGdRkIQDwt2URtcUv+YCHcvoO8ONU1rqCjaRW+vzqMN613vXnnaz0LV4lCoEZrHXCwK5DZ53uAA6PBoK44cJgUOgF/pPZtjGf6Oehzc3fwbZkH1CEVC6YqGFJBJBdEDCgPvl5V4FSRgFs8iwUzEPlmZMlzGNE7GrHvbI0RHZwbABgHpHBRLEcTTU3Uov5wHsWSxxwSIH4KYzpiuPuAtb9mHF8pQgdbMtdWA/oLlY7lOzvYCQGChub5sbtXY8+mKHpuopfjaYQGwjqpY8dubVyKoA3vSU1hwu58w/GiT+lV92sVlO4Gz5vldFc3S8YuV/+ad//ZevvvkuXeVVrLYJHilLud0AUmXvFiIBVCTsBtClKnrH8DjUVyy8A0C67N1CxN2SSFA9XyGqdWfw844xpMhE5S4o7LhqrKn69d0SsttMavaqYK1prk4YzdsQKmQMTU0zvpQjyDmSZgg7SSl8O2GukLFkwZjCLJmi6kH+i2E2LoacufoZI8rkxqlCRmyCdKq+RdUf8NO8XbTRyAhC5rfIOFpYuKDxPF1q0ENt5246bKTOWptO6XsIzchQKrdmXOO6gcGIjQqwCFzm/Zwupl9G3L+mHq/GYmeUaKk/L4lX40TKkJtgo24Ea6Nmo5HPvGDSphP+FcpQjyAPZVsd+Uw2/Jx7TICuQb0lXYnXyWLCotvbohHpmMcAnO5+n/xbbXNPV7FsbsJ9Gq1ub5/+HmidB+2aduDcCVI9bHdrOJWtbQultZvYZ8xVIKM+vxHmHS9I3CFGungBdduUuCQmb6bSab/+HNSUJhjQZZvAgiVGKViMMI2fq5rGDCVbmEVsrGISae1IN5tf3XMEStQb36vikj0mFFZgmy6u+dQrKmzP1BYnstDfT0w0CT8b46/MIqSzEPgwjM8Xm+GTrRhuEtHNQUlMp38AtBqEKmTi8YDNMJn4zpw5V6yNyhhMQo9cYMDpHwiZEUN96xyNGSDFXJIHR+TJhhS8czARnrgwPW9BPi0MBQit2A6OdJgxCJgjNGRuhh1QpkQbOQS2QX5MO10bNWUzSueh1BsL6GzG0H6RMwvol6Qa8r598EWIsdJWB/LNdloH9AA5pJ7d/jP9rl8Pv4dcKg1CQ+rFXbxfLkFn3SY7S3an/VuZfW7DXfWgIF7gMYfMyidy0itIBDgnG245RMtUBR83us5ErFbAW+Ywfm3Fo26dzKMJFuMHWsY9whNqeHYKiNl/I+3FaWx8Pjsr+G/46tXQdcn36P/ZqYxLyP7rDgvKoFRosOoHuuW9A++rTSrwAc0xZQNTlS28m9tKFu0Qc6Yib9EDU/ByV9j20Yi4ky313Opv0acsLcScEqvUQtoFnrCLTqW7IKdzHKRoCXGrNfFX28W6uditswAtLhOJ1kLYM0gBOZIlsbRduaUVKesM1Tp+kye5HYAPme9wr832BS23T2edHbebR7Rm7/XynHZbU73DNdTSOPE87ajsGBqPjshuwiw03YDe3vCmcUidAA29pE2wxBitXFhf1Sm5/Ox3mvXDeVT0cojFYFxwhNtubB1Ynbmx5fTm/djyuCrGqrmFSP8WH3cfl7WOfWhxWfdxWCtgT6cz9Fn/nB0T3d37pWNQSp3PWjun9dlsbLmjW3obpwtgQDpy6fys6qTBzY0VUplW2SsICN0iR9Hjkxtls68HEN0aD1Dp7NmGq6fe0VMr6m/fDHqmi5G3XYzRtdK+PsSABo6fd+Igpt4OejcmYc7sOBboHawpK42U7/DRrrJXJ+7VCntbwF0nYed9eFd4C5K4O+Kg8GeBubhV+jl5Rd7H3OO/ytC39XEmViJmixH86eKXuJvRulTMJwGN2hbJ6cX7rQ7aCRPtWC/4BuDRBwk3ot7B49vbh2tgw6ghuifo/cT3g8R32JsXaNtLgK5NuQ+EDdQOqj9dsgjtQmrx1TtwOuF0ArLaPIjavLDaJXnGhYMqzWpdnNapl8b0g7goDPM5BcXKNfGnoENkAajI9lRkkomBblHksyjCWj238WtnMB8Uwcxnr5AwK51056A4r6UBV817k3FAgRkGIU6Vlk4A/zM8AjHHdyaezqMOW8iQukkAYuVCv0/TvdzcVIP2AcSW3Z3/5e/stRopqmAfNg349nZcXWsD20X913sm1+3x4O9DLLQxyUpCE1CszzsfDBaDekvgHQ2XtqWZ0Kbb9Yer7eN9R1ZjnKo0TXXUhLNn1IPeskUQM60JCVsVqpJ2rYheXaNZ9eiqzgTxnEULine truncated
assets["modal.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/3yTUW+bMBDH3/cpbjwsrVRCW/UpSzptkSZN6qRK7csejX2AV2Mj+0jHEN99h2EsrdI9JDbmfnf3/5/ZKn0AaUQIu6R2ShgohMIESOTaKvy1S9KrBGyZCiKfKkEizYV8Ut41u6TvGXUB4ROQbxE2sAokSMsVDMMr6gm73AmvIvXFOYPCnkX6fAy+fQewfZ+mvGQZ7F3TeV1WBGf7c7i+vLqBxwrhobOSKm1L+NxS5XxYx/CJeax0gAfXeonMK4SvztfAZ6HNf6IkIAfESQh9HcAV8eG7+62NEXDf5kbLKdGdlmgDXsBhDdfryzV8K0CA5JYW6v4OnkUA6wiUDuR13hIqeNZUcQDXLLTBiyndD9eCFBZcTkLzYhEEQUXUbLKsnuqvnS8zzppxvWwUlabRkNfDSZUWxpXR2vm8X01vTLnagBG+xMnMU7R0ltDS/P5URIU8fQ/CoKfpP+37caZtGIaFY7K6eQmSJoNHARwSGlbNjepil2gunfwlStM11XgCy46rjMtYY5uN4HGmvo/Zh+Ff+ay6WURkrOJtRblTXfSLvLBBmlbh2+TcbbyWycs8hXN8c44t4JkTa6CuwV0yPSxMThb4lyosRGso7kOdQPwU+MrUesnMiqNT/zHHY+0OuFjzAevQfJyoqMoIwtv92PQcsc2mfk4oXbbzZl7+AAAA//8BAAD//53P618IBAAA")
+2 -1
View File
@@ -1370,11 +1370,12 @@ func (m *Model) Override(folder string) {
// We are missing the file
need.Flags |= protocol.FlagDeleted
need.Blocks = nil
need.Version = need.Version.Update(m.shortID)
} else {
// We have the file, replace with our version
have.Version = have.Version.Merge(need.Version).Update(m.shortID)
need = have
}
need.Version = need.Version.Update(m.shortID)
need.LocalVersion = 0
batch = append(batch, need)
return true
+222
View File
@@ -0,0 +1,222 @@
// Copyright (C) 2015 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at http://mozilla.org/MPL/2.0/.
// +build integration
package integration
import (
"io/ioutil"
"log"
"os"
"strings"
"testing"
"time"
"github.com/syncthing/protocol"
"github.com/syncthing/syncthing/internal/config"
)
func TestOverride(t *testing.T) {
// Enable "Master" on s1/default
id, _ := protocol.DeviceIDFromString(id1)
cfg, _ := config.Load("h1/config.xml", id)
fld := cfg.Folders()["default"]
fld.ReadOnly = true
cfg.SetFolder(fld)
os.Rename("h1/config.xml", "h1/config.xml.orig")
defer os.Rename("h1/config.xml.orig", "h1/config.xml")
cfg.Save()
log.Println("Cleaning...")
err := removeAll("s1", "s2", "h1/index*", "h2/index*")
if err != nil {
t.Fatal(err)
}
log.Println("Generating files...")
err = generateFiles("s1", 100, 20, "../LICENSE")
if err != nil {
t.Fatal(err)
}
fd, err := os.Create("s1/testfile.txt")
if err != nil {
t.Fatal(err)
}
_, err = fd.WriteString("hello\n")
if err != nil {
t.Fatal(err)
}
err = fd.Close()
if err != nil {
t.Fatal(err)
}
expected, err := directoryContents("s1")
if err != nil {
t.Fatal(err)
}
log.Println("Starting master...")
master := syncthingProcess{ // id1
instance: "1",
argv: []string{"-home", "h1"},
port: 8081,
apiKey: apiKey,
}
err = master.start()
if err != nil {
t.Fatal(err)
}
defer master.stop()
// Wait for one scan to succeed, or up to 20 seconds... This is to let
// startup, UPnP etc complete and make sure the master has the full index
// before they connect.
for i := 0; i < 20; i++ {
err := master.rescan("default")
if err != nil {
time.Sleep(time.Second)
continue
}
break
}
log.Println("Starting slave...")
slave := syncthingProcess{ // id2
instance: "2",
argv: []string{"-home", "h2"},
port: 8082,
apiKey: apiKey,
}
err = slave.start()
if err != nil {
master.stop()
t.Fatal(err)
}
defer slave.stop()
log.Println("Syncing...")
if err = ovCompletion(100, master, slave); err != nil {
t.Fatal(err)
}
log.Println("Verifying...")
actual, err := directoryContents("s2")
if err != nil {
t.Fatal(err)
}
err = compareDirectoryContents(actual, expected)
if err != nil {
t.Fatal(err)
}
log.Println("Changing file on slave side...")
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
t.Fatal(err)
}
_, err = fd.WriteString("text added to s2\n")
if err != nil {
t.Fatal(err)
}
err = fd.Close()
if err != nil {
t.Fatal(err)
}
err = slave.rescan("default")
if err != nil {
t.Fatal(err)
}
log.Println("Syncing...")
time.Sleep(5 * time.Second)
// Expect ~99% completion since the change will be rejected by the master side
if err = ovCompletion(99, master, slave); err != nil {
t.Fatal(err)
}
log.Println("Hitting Override on master...")
resp, err := master.post("/rest/model/override?folder=default", nil)
if err != nil {
t.Fatal(err)
}
if resp.StatusCode != 200 {
t.Fatal(resp.Status)
}
log.Println("Syncing...")
if err = ovCompletion(100, master, slave); err != nil {
t.Fatal(err)
}
// Verify that the override worked
fd, err = os.Open("s1/testfile.txt")
if err != nil {
t.Fatal(err)
}
bs, err := ioutil.ReadAll(fd)
if err != nil {
t.Fatal(err)
}
fd.Close()
if strings.Contains(string(bs), "added to s2") {
t.Error("Change should not have been synced to master")
}
fd, err = os.Open("s2/testfile.txt")
if err != nil {
t.Fatal(err)
}
bs, err = ioutil.ReadAll(fd)
if err != nil {
t.Fatal(err)
}
fd.Close()
if strings.Contains(string(bs), "added to s2") {
t.Error("Change should have been overridden on slave")
}
}
func ovCompletion(expected int, p ...syncthingProcess) error {
mainLoop:
for {
time.Sleep(2500 * time.Millisecond)
tot := 0
for i := range p {
comp, err := p[i].peerCompletion()
if err != nil {
if isTimeout(err) {
continue mainLoop
}
return err
}
for _, pct := range comp {
tot += pct
}
}
if tot >= expected*len(p) {
return nil
}
log.Printf("%d / %d...", tot, expected*len(p))
}
}