Exemplo n.º 1
0
        public void PushToTar(DeduplicatorState state, tar_cs.TarWriter writer)
        {
            const int ReadWriteExecuteAllUsers = 511;

            // First create all the entries for the actual file streams, based
            // on their hashes.
            writer.WriteDirectoryEntry(
                "_DedupFiles",
                "default",
                "default",
                ReadWriteExecuteAllUsers,
                DateTime.UtcNow);
            foreach (var kv in state.FileHashToSource)
            {
                writer.WriteFile(
                    kv.Value,
                    kv.Value.Length,
                    "_DedupFiles/" + kv.Key,
                    "default",
                    "default",
                    ReadWriteExecuteAllUsers,
                    DateTime.UtcNow);
            }

            // Now write all of the real directories and their symlinks.
            foreach (var kv in state.DestinationToFileHash.OrderBy(kv => kv.Key))
            {
                if (kv.Key.EndsWith("/"))
                {
                    // Directory
                    writer.WriteDirectoryEntry(
                        kv.Key.Replace('\\', '/').TrimEnd('/'),
                        "default",
                        "default",
                        ReadWriteExecuteAllUsers,
                        DateTime.UtcNow);
                }
                else
                {
                    // File
                    writer.WriteHardLink(
                        "_DedupFiles/" + kv.Value,
                        kv.Key.Replace('\\', '/'),
                        "default",
                        "default",
                        ReadWriteExecuteAllUsers,
                        DateTime.UtcNow);
                }
            }
        }