<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>emre şahin's digital garden 🍃 - xvc devlog</title>
    <link>https://emresahin.net/series/xvc-devlog/</link>
    <description>The xvc devlog series</description>
    <language>en</language>
    <managingEditor>contact@emresahin.net (Emre Şahin)</managingEditor>
    <lastBuildDate>Tue, 15 Sep 2026 19:46:32 +0000</lastBuildDate>
    <atom:link href="https://emresahin.net/series/xvc-devlog/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Xvc Devlog - 221109</title>
      <published>2022-11-10T09:26:00+00:00</published>
      <updated>2022-11-10T09:26:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 10 Nov 2022 09:26:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog---221109/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog---221109/</guid>
      <description>🐇 How do you want to proceed from here, Mr. 🐢? 🐢 I think I can implement Rsync today. Looking at ssh2-rs , though, I think we can implement file transfer without relying on rsync . It might be easier to implement everything within the code. 🐇 Then you should rename the issue to new ssh . 🐢 Fair. ...</description>
      <category>devlog</category>
      <category>development</category>
      <category>xvc</category>
      <category>ssh</category>
      <category>rsync</category>
      <category>storage</category>
      <category>feature-flags</category>
      <category>rust</category>
      <category>libssh2</category>
      <content:encoded><![CDATA[<p>🐇 How do you want to proceed from here, Mr. 🐢?</p>
<p>🐢 I think I can implement Rsync today. Looking at <a href="https://docs.rs/ssh2/latest/ssh2/">ssh2-rs</a>, though, I think we can implement file transfer without relying on <code>rsync</code>. It might be easier to implement everything within the code.</p>
<p>🐇 Then you should rename the issue to <code>new ssh</code>.</p>
<p>🐢 Fair. There is also the <a href="https://docs.rs/ssh-rs/0.2.2/ssh_rs/">ssh_rs</a> crate, but it doesn’t have full support for the protocol. Instead, we can have another command, like <code>xvc storage new ssh</code>, that uses <code>libssh2</code> via the crate mentioned above. It has some limitations with OpenSSH on macOS.</p>
<p>🐇 From the <a href="https://github.com/alexcrichton/ssh2-rs">crate’s README</a>, it looks like you can enable the <code>vendored-openssl</code> feature to compile it statically.</p>
<p>🐢 Let’s go ahead then. It’s better to compile it behind a feature flag, though.</p>
<p>🐇 Yup. Rsync can be separate. I think for now you can implement rsync via <code>Exec::cmd</code> and make <code>new ssh</code> a new issue.</p>
<p>🐢 I’ll copy this conversation there.</p>
<hr>
<p>🐇 Now, let’s start implementing <code>rsync</code>.</p>
<p>🐢 Do we really want to hide it behind a feature flag? It doesn’t bring any extra complexity to <code>generic</code>, for example—just using the commands and returning the errors.</p>
<p>🐇 I think so. If the user doesn’t have <code>rsync</code> on their system, they’ll just get errors. We don’t need to make the implementation optional, but the tests might be.</p>
<p>🐢 OK.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog - 221108</title>
      <published>2022-11-09T10:42:00+00:00</published>
      <updated>2022-11-09T10:42:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Wed, 09 Nov 2022 10:42:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog---221108/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog---221108/</guid>
      <description>🐇 I think we can begin by checking GitHub PRs . What do you have today? 🐢 The tests for yesterday’s Git integration PR failed. I’ll begin by checking the logs. 🐇 Maybe run the tests locally to see. They might fail on your machine as well. It might be a simple thing. 🐢 Probably, yes. I’ve started ...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>xvc</category>
      <category>git</category>
      <category>testing</category>
      <category>trace</category>
      <category>rsync</category>
      <category>storage</category>
      <category>github actions</category>
      <category>automation</category>
      <content:encoded><![CDATA[<p>🐇 I think we can begin by checking <a href="https://github.com/pulls">GitHub PRs</a>. What do you have today?</p>
<p>🐢 The tests for yesterday’s <a href="https://github.com/iesahin/xvc/pull/105">Git integration PR</a> failed. I’ll begin by checking the logs.</p>
<p>🐇 Maybe run the tests locally to see. They might fail on your machine as well. It might be a simple thing.</p>
<p>🐢 Probably, yes. I’ve started the tests now. I shouldn’t forget to run them before testing the PR; it may save some time.</p>
<p>🐇 Ah, yeah, maybe. Yesterday you were already at the end of the workday, so it didn’t matter much. But you can shorten the testing time by reducing the number of files, etc. I think a separate benchmark suite might be good to have. Tests should be shorter; benchmarks should only run for tags.</p>
<p>🐢 Yup. I should shorten the tests. I should make them use a shorter list of files, maybe.</p>
<p>🐇 Local tests have passed. You’ll have to check the logs.</p>
<p>🐢 It seems <code>git diff --name-only --cached</code> returns files not yet added. That’s causing an error in new repositories with <code>stash</code>. Stashing shouldn’t run at all when there are no staged files.</p>
<p>🐇 Git behavior between the local version and the remote version seems different.</p>
<p>🐢 I think the trace should also show the Git version string.</p>
<p>🐇 You should also require a minimum Git version for the commands. You’re using some newer options, and not all users may have them.</p>
<p>🐢 Yep. Let’s see the version on the CI now.</p>
<hr>
<p>🐢 Ah, I see—the problem is not about versions. It’s that the CI doesn’t configure <code>git config --global user.email</code> and <code>user.name</code>. Commits don’t work without these.</p>
<p>🐇 You should remove the Git version report, then. It’s one more process call for no reason.</p>
<p>🐢 I think it should be in <code>trace!</code>; I can check the verbosity level and call it only if it’s trace.</p>
<hr>
<p>🐢 I completed the xvc-config docs as well. I think I can merge it before the tests finish, as it’s just a documentation update.</p>
<p>🐇 You seem to be rushing for the release.</p>
<p>🐢 Yeah, I want to really start testing this on the servers.</p>
<p>🐇 Then go ahead; let’s release a new version.</p>
<hr>
<p>🐇 It looks like you’re back for an evening session. I think it’s time to start using Xvc on your torrent server.</p>
<p>🐢 Ah, yeah. Let’s see how it goes.</p>
<p>🐇 Create a repository for torrents. Then you can add files to it with cache-type = symlink or cache-type = hardlink.</p>
<p>🐢 I think creating a local storage may also help. I can use it to store files to retrieve them later.</p>
<p>🐇 Umm. We don’t have a “garbage collection” facility yet, you know. There are no file deletions at the moment. It may be better to have a repository-to-repository transfer feature, using SSH.</p>
<p>🐢 Yeah, we don’t have SSH storage either. I think this highlights a lack of features.</p>
<p>🐇 It’s possible to mimic Rsync storage with <code>xvc storage new generic</code>, but it doesn’t feel quite the same.</p>
<p>🐢 Then I’m adding these three tickets.</p>
<p>🐇 I think for 0.3.4, the command we add might be <code>xvc file delete</code>. You can work on this and add <code>rsync</code> support as well.</p>
<p>🐢 There is a <a href="https://docs.rs/librsync/latest/librsync/">librsync</a> bindings library for Rust. But it looks like it doesn’t allow transferring file contents between hosts. There is also <a href="https://github.com/your-tools/rusync">rusync</a>, which is similar to rsync and implemented in Rust. There is also <a href="https://lib.rs/crates/fast_rsync">fast_rsync</a> in pure Rust. It uses MD4 to calculate deltas, though, I think.</p>
<p>🐇 None of these seem to have network capability, though.</p>
<p>🐢 I think it’s better just to use the process for now. We are trying to come up with the simplest solution <em>for now.</em> We are just trying to be more general.</p>
<p>🐇 Yes, I think we can just use the process for the time being.</p>
<p>🐢 Then let’s start by adding it.</p>
<p>🐇 We should also begin to create release notes. GitHub can generate them from PRs. <a href="https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes">Automatically generated release notes</a></p>
<p>🐢 Created an issue for that. Now we’re starting <a href="https://github.com/iesahin/xvc/issues/111"><code>xvc storage new rsync</code> #111</a>.</p>
<p>🐇 Ok. Let’s do this.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog - 221107</title>
      <published>2022-11-08T09:57:00+00:00</published>
      <updated>2022-11-08T09:57:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Tue, 08 Nov 2022 09:57:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog---221107/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog---221107/</guid>
      <description>🐇 Welcome to the November 7th issue of Xvc Devlog. In the previous devlog , we began to implement Git integration. How is it going, Mr. Tortoise? 🐢 It looks like we don’t have many architectural problems. 🐇 You’re forgetting how Exec::cmd works, though. You have those kinds of problems. 🐢 Yeah, I...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>xvc</category>
      <category>architecture</category>
      <category>shell</category>
      <category>git</category>
      <category>gitignore</category>
      <category>rust-analyzer</category>
      <category>LSP</category>
      <content:encoded><![CDATA[<p>🐇 Welcome to the November 7th issue of Xvc Devlog. In the <a href="https://emresahin.net/xvc-devlog-221105">previous devlog</a>, we began to implement Git integration. How is it going, Mr. Tortoise?</p>
<p>🐢 It looks like we don’t have many architectural problems.</p>
<p>🐇 You’re forgetting how <code>Exec::cmd</code> works, though. You have those kinds of problems.</p>
<p>🐢 Yeah, I’m figuring that out. <code>Exec::shell</code> requires a string to run on the shell, while <code>Exec::cmd</code> just needs a command name. You have to supply <code>args</code> with another function. I’m writing a closure now to handle this.</p>
<hr>
<p>🐢 It started working, but it revealed a much bigger problem: <code>.xvc/</code> is not added to <code>.gitignore</code> in <code>xvc init</code>.</p>
<p>🐇 Wow, that’s a showstopper.</p>
<p>🐢 Yup. I think I should fix it as well.</p>
<p>🐇 On closer glance, I think the problem is not <code>xvc init</code> <em>not modifying</em> <code>.gitignore</code>; it modifies it incorrectly. Maybe putting certain files on a whitelist is a better idea than trying to blacklist everything.</p>
<p>🐢 Yeah, we should define a set of <em>Git-tracked</em> files and directories, whitelist them, and let all other files be ignored.</p>
<p>🐇 Go ahead, then.</p>
<p>🐢 I think I’ve fixed it. There were two problems: the initial gitignore content was wrong, and it was placed in the root of the repository instead of <code>.xvc</code>.</p>
<p>🐇 Maybe putting it directly in the root is better than hiding it in <code>.xvc</code>. What do you think?</p>
<p>🐢 There seems to be an assumption in <code>file track</code> to have a <code>.gitignore</code> file somewhere. I think we should also handle changes in <code>.gitignore</code> files throughout the repository.</p>
<p>🐇 Umm, yes. We should handle <code>.gitignore</code> files as well. But not all <code>.gitignore</code> files are changed by Xvc. How can we make sure they were modified by Xvc?</p>
<p>🐢 I think there are ways to do that, like tracking them somewhere. But I believe we shouldn’t try. We should just get a list of <code>.gitignore</code> files, <code>git add</code> them, and include them in the commit.</p>
<p>🐇 Ok. Let’s write a test for this as well. No <code>.gitignore</code> should appear in <code>git status -s</code>.</p>
<p>🐢 I wrote the test. It fails now. Do you think we should check the output of Git status to determine which files to add?</p>
<p>🐇 That may be a good idea. Git status should already know which files need to be added. We can use that information.</p>
<p>🐢 <a href="https://css-tricks.com/git-pathspecs-and-how-to-use-them/">It looks like <code>pathspec</code></a> is enough to modify <code>git add</code> behavior. We should be able to write <code>*.gitignore</code> and let all gitignore files be added.</p>
<p>🐇 Let’s try this manually.</p>
<p>🐢 Yep, it works. <code>git add '*.gitignore'</code> adds all <code>.gitignore</code> files in the subdirectories, too.</p>
<p>🐇 Congrats. 👏🥳</p>
<hr>
<p>🐢 I’m writing the missing documentation for the crates. There are <code>proc_macro not expanded</code> errors all over the code.</p>
<p>🐇 I think you should update rust-analyzer and everything. There must be a command for this.</p>
<p>🐢 I reinstalled RA with <code>:LspInstall</code> and restarted the LSP. It seems to work correctly now.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog - 221105</title>
      <published>2022-11-07T10:04:00+00:00</published>
      <updated>2022-11-07T10:04:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Mon, 07 Nov 2022 10:04:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog---221105/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog---221105/</guid>
      <description>It’s Saturday, November 5th. The best part of free software development seems to be being able to work whenever you want, including Saturdays. Ah yeah, when you work for free, you can do so at any time you want, perhaps. You also don’t have team members, and that means when you sit in front of th...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>xvc</category>
      <category>git</category>
      <category>dvc</category>
      <category>git-lfs</category>
      <category>git-annex</category>
      <category>shell</category>
      <category>process</category>
      <category>which</category>
      <category>VCS</category>
      <content:encoded><![CDATA[<p>It’s Saturday, November 5th. The best part of free software development seems to be being able to work whenever you want, including Saturdays.</p>
<p>Ah yeah, when you work for free, you can do so at any time you want, perhaps. You also don’t have team members, and that means when you sit in front of this, you can move it.</p>
<p>Umm, right. Let’s take a look at <a href="https://github.com/iesahin/xvc/pulls">the outstanding PRs</a>.</p>
<p>You have a <a href="https://github.com/iesahin/xvc/pull/93">documentation PR#93</a>. You also have work that you’ve <a href="https://github.com/iesahin/xvc/issues/74">begun to integrate Git into.</a> I think it’s better to focus on the latter today.</p>
<p>Right. Let’s think about the relationship between Git and Xvc. I believe we should identify a general relation to avoid ending up in a mess like DVC and Git.</p>
<p>Why do you think the DVC and Git relationship is a mess?</p>
<p>They don’t automate common Git operations like a commit after <code>dvc add</code>. There is only <em>auto-stage</em>, and that’s turned off by default. This makes it seem that DVC wants to intervene as little as possible with the user’s Git workflow. That’s understandable. I support this. But on the other hand, they use the <code>.git/</code> directory itself to store and manage experiments in a custom way that creates custom stash objects for experiments. This is against the principle of minimum intervention.</p>
<p>So this makes it a mess?</p>
<p>The mess, in my opinion, is caused by the second factor. If DVC doesn’t perform any Git operations, that’s alright. It was intended to be VCS-agnostic. Then experiments came and used Git internals in a way that no other similar tool uses.</p>
<p>Git-LFS and Git-Annex seem to use some non-standard mechanisms as well.</p>
<p>Ok. Not <em>no other tool</em> uses, but in a way that no other tool has used.</p>
<p>You know, GitHub PRs are also stored in a similar way. They also use non-standard machinery.</p>
<p>Yeah, but these tools are all Git-specific tools. They accept the <em>dominion of Git</em>, and don’t try to bring any VCS-agnosticism.</p>
<p>And Xvc tries to have this agnosticism?</p>
<p>I believe the initial design of DVC, which aims to be VCS-agnostic or being able to run without a VCS, is valuable. I like the idea behind Git, but the interface and implementation show that it’s a <em>gradual development.</em> There is no library behind it.</p>
<p>Libgit?</p>
<p><a href="https://libgit2.org">Libgit2</a> is something different. Although it’s said to have some common code, it doesn’t support all features. Git is command-line software with a mix of scripts and compiled executables, and not all code seems to be written in a way that could be used by external tools.</p>
<p>Hmm. <a href="https://github.com/iesahin/xvc/issues/74#issuecomment-1302531362">The comment</a> you added to the issue says <code>git stash push --staged</code> is not available in libgit2. Can’t you mimic it like DVC does for branches?</p>
<p>I don’t want to depend on Git at that level.</p>
<p>So, you’ll be using the CLI and shell for Git?</p>
<p>Yes, I believe, at the moment, before any performance tests, that this doesn’t matter much. Running Git commands once in a while using the shell shouldn’t make much difference in overall performance.</p>
<p>Then you’ll use it like a command-line tool, like the user?</p>
<p>Yes, and I’ll make it run outside of the usual threads. All Git will be like a sandwich, wrapping around Xvc operations. If there are <code>--git-ref</code> instructions in an <code>xvc</code> command, it will be run before Xvc performs the command, and if there are any changes in Xvc metafiles, they will be committed to the current branch.</p>
<p>Like</p>
<pre class="mermaid">graph LR

co["git checkout"] --&gt; xvc
xvc --&gt; cm["git commit"]

</pre>

<p>The first could be a branch as well. So we have:</p>
<pre class="mermaid">graph LR

br["git branch"] --&gt; xvc
co["git checkout"] --&gt; xvc
xvc --&gt; cm["git commit"]

</pre>

<p>Looks sensible. How will you reflect these in the command line?</p>
<p>With something like <code>xvc --git-checkout my-branch file list</code></p>
<p>Hmm, and for a branch?</p>
<p>I think instead of different options for <code>branch</code>, <code>checkout</code> or <code>tag</code>, we can have a <code>git-ref</code> option that marks the option as a git reference. It will be checked out, or created as a branch from the current one if it doesn’t exist.</p>
<p>I think creating a branch is not a good idea. It should be explicit. You can just send the <code>--git-ref</code> value to <code>git checkout</code> and perform the Xvc operation. If the user wants to create a branch, I think they can do it themselves.</p>
<p>What about storing the results in a branch? After adding a bunch of files, they may want to store them in another branch, maybe?</p>
<p>That’s sensible. We can have another option, like <code>--to-branch</code> in certain operations.</p>
<p>Or in the <code>xvc</code> command as a general option. In that case, we can change the option names to <code>--from-ref</code> and <code>--to-branch</code>. It will be like:</p>
<pre class="mermaid">graph LR

fr["git checkout $(--from-ref)"] --&gt; xvc
xvc --&gt; tb["git checkout --branch $(--to-branch)"]
tb --&gt; co["git add .xvc &amp;&amp; git commit -m 'xvc cmd'"]

</pre>

<p>If no such options are given, xvc will run without branching, right?</p>
<p>Yep. <code>--from-ref</code> and <code>--to-branch</code> options are just shortcuts for user behavior. Any other VCS tool could be used this way. We don’t need to integrate Git at the library level.</p>
<p>This brings up the question of portability, though. When you aim for the software to be portable, you can’t rely on the existence of Git on the host, right?</p>
<p>I think a <code>git.command</code> option in the configuration is a good idea. Xvc will issue a warning if it can’t run the commands.</p>
<p>Will you use the shell to run this command? Otherwise no <code>$PATH</code> configuration is possible, you know.</p>
<p>I believe that could be another option: <code>git.use_shell</code>. If <code>git.command</code> is set to an absolute path, Xvc may use it without the shell. Otherwise, it can use the shell. Running the process directly will make it faster and more secure.</p>
<p>There is also this option to run Xvc in another process. Because we may access Git in the shell that runs Xvc, and if we can access it, maybe we don’t need shell execution in the process.</p>
<p>That’s a cool idea. But I wouldn’t add that extra complexity. Instead, we can try to find the <code>git</code> executable if <code>git.command</code> is not an absolute path. If <code>git.command = /usr/bin/git</code> in the configuration, we use it as is. Otherwise, we can get <code>$PATH</code> or <code>%PATH%</code> from the environment and search for <code>git.command</code> in that to find the exact executable.</p>
<p>It looks like there is a crate called <a href="https://crates.io/crates/which">which</a> that does exactly what we are looking for.</p>
<p>Ah, cool. Then we can just use that to find the executable and run it. We don’t need to drop to a shell.</p>
<p>Yep. Let’s go back to implementation now.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog 221031</title>
      <published>2022-11-05T09:18:00+00:00</published>
      <updated>2022-11-05T09:18:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Sat, 05 Nov 2022 09:18:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog-221031/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog-221031/</guid>
      <description>🐇 It’s the last day of October. How are you doing, mister? 🐢 Yep. It was a nice October. I would like to finish by increasing the coverage. 🐇 How about setting up a runner on your machine to test them locally? 🐢 Not now. I should fix the tests as always. Later I can take a look at it. I don’t wan...</description>
      <category>xvc</category>
      <category>devlog</category>
      <category>ci/cd</category>
      <category>cross-compilation</category>
      <category>apple silicon</category>
      <category>testing</category>
      <category>xvc</category>
      <category>redirection</category>
      <category>shell</category>
      <content:encoded><![CDATA[<p>🐇 It’s the last day of October. How are you doing, mister?</p>
<p>🐢 Yep. It was a nice October. I would like to finish by increasing the coverage.</p>
<p>🐇 How about setting up a runner on your machine to test them locally?</p>
<p>🐢 Not now. I should fix the tests as always. Later I can take a look at it. I don’t want to distract myself with it.</p>
<p>🐇 You’ll need to create Apple Silicon binaries, though.</p>
<p>🐢 I think I can cross-compile for aarch.</p>
<p>🐇 You were doing this in the past, trying to build all binaries on a single Ubuntu VM. It didn’t work, as far as I remember.</p>
<p>🐢 I hadn’t even read <a href="https://rust-lang.github.io/rustup/cross-compilation.html">this section</a> then, and there is a <a href="https://github.com/cross-rs/cross">dedicated project</a> for it. The proper way is to use that. I’ll return to this after fixing the tests. I think we can release Xvc on all platforms supported by Rust.</p>
<p>🐇 Using <code>cross-rs</code> on GitHub Actions may be challenging. It seems <a href="https://stackoverflow.com/questions/66849112/how-do-i-cross-compile-a-rust-application-from-macos-x86-to-macos-silicon">Apple Silicon doesn’t need that much work</a> either. You can set up cross-compilation with <code>rustup</code> targets.</p>
<p>🐢 Yeah. It looks so. Let’s take a look at the <a href="https://emresahin.net/xvc-devlog-221030">previous devlog.</a></p>
<p>🐇 The page seems missing. Would you like to fix your site first?</p>
<p>🐢 Ah, yeah. I should, maybe. Now it’s time to fix those PRs. I’ll take care of the site later. I should change the theme anyway.</p>
<p>🐇 Ok. Let’s take a look at <a href="https://github.com/iesahin/xvc/pulls">outstanding PRs</a>.</p>
<p>🐢 I want to fix the failed tests locally first. Yesterday I wasn’t able to redirect the output. It looks like the correct way of doing it is <code>cargo test --all-features --no-fail-fast &gt; $TMPDIR/xvc-test.log 2&gt;&amp;1</code>. It’s required to put <code>2&gt;&amp;1</code> at the end, not between the redirection and output.</p>
<p>🐇 There is also the <code>&amp;&gt;</code> operator that you may want to use. <code>cargo test --all-features --no-fail-fast &amp;&gt; $TMPDIR/xvc-test.log</code> should be equivalent to this.</p>
<p>🐢 I’ll try it when the tests finish.</p>
<p>🐇 In the meantime, you can work to fix the documentation. In another repository, perhaps.</p>
<p>🐢 Good idea. Let me clone that.</p>
<p>🐇 Looks like the tests have finished and the only error is Minio. It couldn’t find the env variables you defined.</p>
<p>🐢 Restarted the shell and the tests. Returned to docs now.</p>
<hr>
<p>🐢 Added a few function docs. Storage tests seem to pass. Probably they will fail in GA because of <code>rsync</code> tests using <code>one.emresult.com</code> login in my name.</p>
<p>🐇 If that’s expected, you can push and begin to fix it.</p>
<p>🐢 Yeah, let’s push the tests.</p>
<hr>
<p>🐢 It looks like connecting to localhost also poses a challenge. Instead, I can create a user for <code>xvc</code> on the server and limit its usage.</p>
<p>🐇 Hmm. Good idea for now.</p>
<p>🐢 I created a new user <code>xvc-test@one.emresult.com</code> and its SSH keys. I’ll update the action to write the secret to the keyfile.</p>
<hr>
<p>🐇 Looks like you forgot to install <code>mc</code> for Minio connection.</p>
<p>🐢 Yeah, I must convert Minio tests to use <code>s3cmd</code>.</p>
<p>🐇 And your region in <code>s3</code> configuration seems to be wrong.</p>
<p>🐢 I’ll need to check this.</p>
<p>🐇 There is this line in the tests <code>let region = env::var("AWS_DEFAULT_REGION").unwrap_or("us-east-1".to_string());</code> that’s probably causing that error. You should define the region properly.</p>
<p>🐢 I set this to <code>eu-central-1</code> directly and will check the Minio error in the next session.</p>
<p>🐇 👏</p>
<hr>
<p>🐢 It’s working except for the rsync tests now.</p>
<p>🐇 I think you can just use localhost to run the tests. You may need to install openssh-server, but it should work with localhost without configuration.</p>
<p>🐢 There may be a step missing in the configuration. I’ll try to make it run.</p>
<hr>
<p>🐢 I’m trying to use <code>.ssh/config</code> in GA to allow connections to the server. It doesn’t work for some reason.</p>
<p>🐇 You may try to log in to the server outside of the tests and check if it’s running.</p>
<hr>
<p>🐢 Yesterday’s last attempt was successful, and now we have working remote storage tests.</p>
<p>🐇 👏👏👏🥳</p>
<p>🐢 I’m merging the PR.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog 221030</title>
      <published>2022-10-31T08:57:00+00:00</published>
      <updated>2022-10-31T08:57:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Mon, 31 Oct 2022 08:57:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog-221030/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog-221030/</guid>
      <description>🐇 We’ll start by checking the repository today. What are the most important issues? 🐢 I’ve merged PR#66 . Let’s list the outstanding issues now. 65 OPEN Add Mermaid Support to Netlify Installation 64 OPEN Fix `xvc-storage` compilation warnings bug 54 OPEN Fix all references to `xvc data` in the d...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>github actions</category>
      <category>arc42</category>
      <category>debugging</category>
      <category>xvc storage</category>
      <category>tests</category>
      <category>s3cmd</category>
      <content:encoded><![CDATA[<p>🐇 We’ll start by checking <a href="https://github.com/iesahin/xvc">the repository</a> today. What are the most important issues?</p>
<p>🐢 I’ve merged <a href="https://github.com/iesahin/xvc/pull/66">PR#66</a>. Let’s list the outstanding issues now.</p>
<pre><code>65	OPEN	Add Mermaid Support to Netlify Installation
64	OPEN	Fix `xvc-storage` compilation warnings	bug
54	OPEN	Fix all references to `xvc data` in the documentation
51	OPEN	Add a benchmark script to compare Xvc with other tools
50	OPEN	Consider changing `xvc file push` to `xvc file send` and `xvc file pull` to `xvc file retrieve`
49	OPEN	Add `--generic-command` as a dependency type to `xvc pipeline dependency`
48	OPEN	Write rsync example for `xvc storage generic`	documentation
47	OPEN	Write rclone example for `xvc storage generic`	documentation
46	OPEN	Allow to skip init in remotes with `--skip-init` option
45	OPEN	Update `VStore::to_store` to use some internal mechanism to avoid `XvcStore::insert`
43	OPEN	Update to `clap 4.0`
42	OPEN	Clean up xvc crate dependencies
36	OPEN	Add version to released file binaries
33	OPEN	Update `arch/remotes.md` for new naming	documentation
32	OPEN	Remove arc42 sections from the documentation	documentation
29	OPEN	Add documentation for `xvc storage new gcs`	documentation
28	OPEN	`xvc storage new yandex`	enhancement
24	OPEN	Create a logo for Xvc	documentation
23	OPEN	Add a Github action to upload new versions to crates.io	automation
20	OPEN	ref: Add rsync example for `xvc storage new generic`
18	OPEN	Add a new workflow for remote tests	automation
12	OPEN	Create a website for Xvc
5	OPEN	Add storage tests to Github Actions	automation
4	OPEN	fix clippy warnings	bug
1	OPEN	`xvc storage new` for all S3 compatible cloud services supported by `rust-s3`
</code></pre>
<p>🐇 As far as I know, you removed the arc42 stubs from the docs yesterday. You can close issue #32.</p>
<p>🐢 I closed it via <code>gh issue close</code>.</p>
<p>🐇 You should add a comment to that.</p>
<p>🐢 Added the comment.</p>
<hr>
<p>🐇 It’s October 30th. Looking at the logs, you’ve <a href="https://github.com/iesahin/xvc/issues?q=is%3Aissue+is%3Aclosed">closed some more issues since we last talked.</a></p>
<p>🐢 I’ve been productive over the last few days. Now, let’s take a look at the <a href="https://github.com/iesahin/xvc/issues?q=is%3Aopen+is%3Aissue">open</a> issues.</p>
<p>🐇 I think you have a more pressing problem. <a href="https://github.com/iesahin/xvc/actions/runs/3352401264">Your tests</a> are failing. You need to fix them first before moving to another task.</p>
<p>🐢 Created a new <a href="https://github.com/iesahin/xvc/issues/81">issue</a>. The logs say:</p>
<pre><code>81Z error: 7 targets failed:
2022-10-29T18:18:36.8969467Z ##[error]    `-p xvc-workflow-tests --test test_storage_new_digital_ocean`
2022-10-29T18:18:36.8970697Z     `-p xvc-workflow-tests --test test_storage_new_gcp`
2022-10-29T18:18:36.8971279Z     `-p xvc-workflow-tests --test test_storage_new_generic_rsync`
2022-10-29T18:18:36.8971840Z     `-p xvc-workflow-tests --test test_storage_new_minio`
2022-10-29T18:18:36.8972387Z     `-p xvc-workflow-tests --test test_storage_new_r2`
2022-10-29T18:18:36.8973035Z     `-p xvc-workflow-tests --test test_storage_new_s3`
2022-10-29T18:18:36.8973577Z     `-p xvc-workflow-tests --test test_storage_new_wasabi`
2022-10-29T18:18:36.9368079Z ##[error]The process '/home/runner/.cargo/bin/cargo' failed with exit code 101
</code></pre>
<p>🐇 Looking at the logs, you should clean up those older branches.</p>
<p>🐢 Let’s do it now.</p>
<hr>
<p>🐢 Done. I’ve deleted all branches except <code>main</code>.</p>
<p>🐇 Good. I think the best way is to delete them as soon as you merge them.</p>
<p>🐢 I’ve activated that setting. These were older branches.</p>
<p>🐇 Cool. Now, will you be checking the failing tests?</p>
<p>🐢 I think remote tests should never run if there are other errors. We can run coverage and remote tests as a second step after the first succeed.</p>
<p>🐇 That seems like a neat idea. You want to split the current job into two: one for compiling and testing the non-remote parts, and the second for coverage and storage tests. It won’t waste CI minutes that way?</p>
<p>🐢 On second thought, I think at the moment, that’s not a pressing issue. We should start fixing these tests at once. We can split them later.</p>
<p>🐇 Ok. It looks from the logs like secrets are not being made available to your jobs.</p>
<pre><code>2022-10-29T18:18:17.5039311Z test test_storage_new_digital_ocean ... FAILED
2022-10-29T18:18:17.5039550Z
2022-10-29T18:18:17.5039652Z failures:
2022-10-29T18:18:17.5039784Z
2022-10-29T18:18:17.5040197Z ---- test_storage_new_digital_ocean stdout ----
2022-10-29T18:18:17.5040558Z Error: VarError { source: NotPresent }
2022-10-29T18:18:17.5040758Z
2022-10-29T18:18:17.5040765Z
</code></pre>
<p>🐢 I added them now. Let’s wait until the job ends to get a new set of logs.</p>
<p>🐇 You can write some documentation in the meantime.</p>
<p>🐢 I think <a href="https://github.com/iesahin/xvc/issues/82">#82</a> is a good candidate for this. There must not be too many missing docs in the ECS crate.</p>
<p>🐇 It was about <code>walker</code> and you fixed the <code>ecs</code>. You’re the most absentminded developer here, I believe.</p>
<p>🐢 Ooops, you’re right. I’ll add them together in a <a href="https://github.com/iesahin/xvc/pull/93">single PR.</a></p>
<p>🐇 In the meantime, the storage testing job has ended with 🔴.</p>
<p>🐢 Checking the raw logs. It looks like we didn’t update the tests to match the current options:</p>
<pre><code>2022-10-30T14:45:50.1058348Z error: Found argument '--storage-prefix' which wasn't expected, or isn't valid in this context
2022-10-30T14:45:50.1059809Z ##[error]Found argument '--storage-prefix' which wasn't expected, or isn't valid in this context
2022-10-30T14:45:50.1061740Z 	If you tried to supply `--storage-prefix` as a value rather than a flag, use `-- --storage-prefix`
2022-10-30T14:45:50.1063220Z
2022-10-30T14:45:50.1063394Z USAGE:
2022-10-30T14:45:50.1064302Z     xvc storage new digital-ocean --name &lt;NAME&gt; --bucket-name &lt;BUCKET_NAME&gt; --region &lt;REGION&gt;
</code></pre>
<p>🐇 Is it <code>--storage-prefix</code> or <code>--remote-prefix</code>? Which one is clearer?</p>
<p>🐢 I think updating the tests to conform to the current options is better for now. We can update the options later if desired.</p>
<p>🐇 Another failure is <code>rg</code>. You assume it exists on the testing system.</p>
<p>🐢 <code>ripgrep</code> is available in Ubuntu 20.04, so we can just update the initial package list.</p>
<p>🐇 The same <code>--storage-prefix</code> failure appears in the <code>minio</code> tests.</p>
<p>🐢 Ok. Fixing it.</p>
<p>🐇 S3 tests want to run the <code>new-s3</code> subcommand. I think we now see why we need these tests in the first place.</p>
<p>🐢 Yeah. Fixing the prefix option, too.</p>
<p>🐇 <code>s3cmd</code> is also required. You should add it, too.</p>
<p>🐢 Ok. I think we’ve added all missing dependencies. I’ll have to convert the <code>mc</code> tests for Minio to use <code>s3cmd</code>.</p>
<p>🐇 Then we can try again. Now, we can get back to documentation.</p>
<p>🐢 Added some more documentation to PR#93. I think it’s better to return to the storage test errors now.</p>
<p>🐇 It looks like you have missing DigitalOcean credentials.</p>
<p>🐢 Let’s take a look.</p>
<hr>
<p>🐢 I’ve updated the tests to use a config file instead of command-line arguments that would be visible in the logs.</p>
<p>🐇 Good practice. You also need to remove previous logs.</p>
<p>🐢 Maybe there is an option for that.</p>
<p>🐇 It looks like there isn’t. There are masking options; when we add them to secrets, they are masked. But you shouldn’t use them in calls anyway.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
