protected override void CopyFile(FileInfo sourceFile, FileInfo destinationFile) { #region Sanity checks if (sourceFile == null) throw new ArgumentNullException("sourceFile"); if (destinationFile == null) throw new ArgumentNullException("destinationFile"); #endregion base.CopyFile(sourceFile, destinationFile); if (_sourceIsUnixFS && !_destinationIsUnixFS && FileUtils.IsExecutable(sourceFile.FullName)) FlagUtils.Set(Path.Combine(DestinationPath, FlagUtils.XbitFile), destinationFile.RelativeTo(new DirectoryInfo(DestinationPath))); }
/// <inheritdoc/> protected override void HandleFile(FileInfo file, bool executable = false) { #region Sanity checks if (file == null) throw new ArgumentNullException(nameof(file)); #endregion var entry = new ZipEntry(file.RelativeTo(SourceDirectory)) { Size = file.Length, DateTime = file.LastWriteTimeUtc, HostSystem = HostSystemID.Unix, ExtraData = GetUnixTimestamp(file.LastWriteTimeUtc) }; if (executable) entry.ExternalFileAttributes = ZipExtractor.DefaultAttributes | ZipExtractor.ExecuteAttributes; _zipStream.PutNextEntry(entry); using (var stream = file.OpenRead()) stream.CopyToEx(_zipStream); }
/// <inheritdoc/> protected override void HandleFile(FileInfo file, bool executable = false) { #region Sanity checks if (file == null) throw new ArgumentNullException(nameof(file)); #endregion var entry = new TarEntry(new TarHeader { Name = file.RelativeTo(SourceDirectory), ModTime = file.LastWriteTimeUtc, Mode = (executable ? TarExtractor.DefaultMode | TarExtractor.ExecuteMode : TarExtractor.DefaultMode) }); var hardlinkTarget = _previousFiles.FirstOrDefault(previousFile => FileUtils.AreHardlinked(previousFile.FullName, file.FullName)); if (hardlinkTarget != null) { entry.TarHeader.TypeFlag = TarHeader.LF_LINK; entry.TarHeader.LinkName = hardlinkTarget.RelativeTo(SourceDirectory); _tarStream.PutNextEntry(entry); } else { _previousFiles.Add(file); entry.Size = file.Length; _tarStream.PutNextEntry(entry); using (var stream = file.OpenRead()) stream.CopyToEx(_tarStream); } _tarStream.CloseEntry(); }