projects
/
apt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tests: avoid time-dependent rebuild of caches
[apt.git]
/
methods
/
rred.cc
diff --git
a/methods/rred.cc
b/methods/rred.cc
index 351c1ebf998b597761e3707010a79c0357bdddd4..51af3755784567aa84d47428b1f713d7ac384a81 100644
(file)
--- a/
methods/rred.cc
+++ b/
methods/rred.cc
@@
-7,9
+7,9
@@
#include <config.h>
#include <config.h>
+#include <apt-pkg/init.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/error.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/error.h>
-#include <apt-pkg/acquire-method.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/hashes.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/hashes.h>
#include <apt-pkg/configuration.h>
@@
-490,7
+490,11
@@
class Patch {
for (ch = filechanges.rbegin(); ch != filechanges.rend(); ++ch) {
std::list<struct Change>::reverse_iterator mg_i, mg_e = ch;
while (ch->del_cnt == 0 && ch->offset == 0)
for (ch = filechanges.rbegin(); ch != filechanges.rend(); ++ch) {
std::list<struct Change>::reverse_iterator mg_i, mg_e = ch;
while (ch->del_cnt == 0 && ch->offset == 0)
+ {
++ch;
++ch;
+ if (unlikely(ch == filechanges.rend()))
+ return;
+ }
line -= ch->del_cnt;
std::string buf;
if (ch->add_cnt > 0) {
line -= ch->del_cnt;
std::string buf;
if (ch->add_cnt > 0) {
@@
-530,6
+534,7
@@
class Patch {
dump_mem(out, ch->add, ch->add_len, hash);
}
dump_rest(out, in, hash);
dump_mem(out, ch->add, ch->add_len, hash);
}
dump_rest(out, in, hash);
+ out.Flush();
}
};
}
};
@@
-642,7
+647,7
@@
class RredMethod : public aptMethod {
std::cerr << "FAILED to open inp " << Path << std::endl;
return _error->Error("Failed to open inp %s", Path.c_str());
}
std::cerr << "FAILED to open inp " << Path << std::endl;
return _error->Error("Failed to open inp %s", Path.c_str());
}
- if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create, FileFd::Extension) == false)
+ if (out.Open(Itm->DestFile, FileFd::WriteOnly | FileFd::Create
| FileFd::BufferedWrite
, FileFd::Extension) == false)
{
std::cerr << "FAILED to open out " << Itm->DestFile << std::endl;
return _error->Error("Failed to open out %s", Itm->DestFile.c_str());
{
std::cerr << "FAILED to open out " << Itm->DestFile << std::endl;
return _error->Error("Failed to open out %s", Itm->DestFile.c_str());
@@
-654,6
+659,11
@@
class RredMethod : public aptMethod {
out.Close();
inp.Close();
out.Close();
inp.Close();
+ if (_error->PendingError() == true) {
+ std::cerr << "FAILED to read or write files" << std::endl;
+ return false;
+ }
+
if (Debug == true) {
std::clog << "rred: finished file patching of " << Path << "." << std::endl;
}
if (Debug == true) {
std::clog << "rred: finished file patching of " << Path << "." << std::endl;
}
@@
-661,7
+671,7
@@
class RredMethod : public aptMethod {
struct stat bufbase, bufpatch;
if (stat(Path.c_str(), &bufbase) != 0 ||
stat(patch_name.c_str(), &bufpatch) != 0)
struct stat bufbase, bufpatch;
if (stat(Path.c_str(), &bufbase) != 0 ||
stat(patch_name.c_str(), &bufpatch) != 0)
- return _error->Errno("stat", _("Failed to stat
"
));
+ return _error->Errno("stat", _("Failed to stat
%s"), Path.c_str(
));
struct timeval times[2];
times[0].tv_sec = bufbase.st_atime;
struct timeval times[2];
times[0].tv_sec = bufbase.st_atime;
@@
-671,7
+681,7
@@
class RredMethod : public aptMethod {
return _error->Errno("utimes",_("Failed to set modification time"));
if (stat(Itm->DestFile.c_str(), &bufbase) != 0)
return _error->Errno("utimes",_("Failed to set modification time"));
if (stat(Itm->DestFile.c_str(), &bufbase) != 0)
- return _error->Errno("stat", _("Failed to stat
"
));
+ return _error->Errno("stat", _("Failed to stat
%s"), Itm->DestFile.c_str(
));
Res.LastModified = bufbase.st_mtime;
Res.Size = bufbase.st_size;
Res.LastModified = bufbase.st_mtime;
Res.Size = bufbase.st_size;
@@
-682,7
+692,7
@@
class RredMethod : public aptMethod {
}
public:
}
public:
- RredMethod() : aptMethod("rred", "2.0",
SingleInstance |
SendConfig), Debug(false) {}
+ RredMethod() : aptMethod("rred", "2.0", SendConfig), Debug(false) {}
};
int main(int argc, char **argv)
};
int main(int argc, char **argv)
@@
-693,12
+703,13
@@
int main(int argc, char **argv)
Patch patch;
if (argc <= 1) {
Patch patch;
if (argc <= 1) {
- RredMethod Mth;
- return Mth.Run();
+ return RredMethod().Run();
}
// Usage: rred -t input output diff ...
if (argc > 1 && strcmp(argv[1], "-t") == 0) {
}
// Usage: rred -t input output diff ...
if (argc > 1 && strcmp(argv[1], "-t") == 0) {
+ // Read config files so we see compressors.
+ pkgInitConfig(*_config);
just_diff = false;
test = true;
i = 4;
just_diff = false;
test = true;
i = 4;
@@
-726,17
+737,20
@@
int main(int argc, char **argv)
FileFd out, inp;
std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n";
inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension);
FileFd out, inp;
std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n";
inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension);
- out.Open(argv[3], FileFd::WriteOnly | FileFd::Create, FileFd::Extension);
+ out.Open(argv[3], FileFd::WriteOnly | FileFd::Create
| FileFd::BufferedWrite
, FileFd::Extension);
patch.apply_against_file(out, inp);
patch.apply_against_file(out, inp);
+ out.Close();
} else if (just_diff) {
FileFd out;
out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
patch.write_diff(out);
} else if (just_diff) {
FileFd out;
out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
patch.write_diff(out);
+ out.Close();
} else {
FileFd out, inp;
} else {
FileFd out, inp;
- out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
+ out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create
| FileFd::BufferedWrite
);
inp.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly);
patch.apply_against_file(out, inp);
inp.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly);
patch.apply_against_file(out, inp);
+ out.Close();
}
return 0;
}
}
return 0;
}