dvc-utils 0.0.6__tar.gz → 0.0.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/PKG-INFO +1 -1
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils/main.py +1 -84
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils.egg-info/PKG-INFO +1 -1
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils.egg-info/SOURCES.txt +0 -1
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/setup.py +1 -1
- dvc-utils-0.0.6/dvc_utils/named_pipes.py +0 -19
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/LICENSE +0 -0
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/README.md +0 -0
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils/__init__.py +0 -0
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils.egg-info/dependency_links.txt +0 -0
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils.egg-info/entry_points.txt +0 -0
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/dvc_utils.egg-info/top_level.txt +0 -0
- {dvc-utils-0.0.6 → dvc-utils-0.0.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dvc-utils
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.7
|
4
4
|
Summary: CLI for diffing DVC files at two commits (or one commit vs. current worktree), optionally passing both through another command first
|
5
5
|
Home-page: https://github.com/runsascoded/dvc-utils
|
6
6
|
Author: Ryan Williams
|
@@ -2,15 +2,12 @@ from functools import cache
|
|
2
2
|
from os import environ as env, getcwd
|
3
3
|
from os.path import join, relpath
|
4
4
|
import shlex
|
5
|
-
from subprocess import Popen, PIPE
|
6
5
|
from typing import Optional, Tuple
|
7
6
|
|
8
7
|
from click import option, argument, group
|
9
8
|
import click
|
10
9
|
import yaml
|
11
|
-
from utz import process,
|
12
|
-
|
13
|
-
from dvc_utils.named_pipes import named_pipes
|
10
|
+
from utz import diff_cmds, process, err, singleton
|
14
11
|
|
15
12
|
|
16
13
|
@group()
|
@@ -69,86 +66,6 @@ def dvc_cache_path(ref: str, dvc_path: Optional[str] = None, log: bool = False)
|
|
69
66
|
return join(dvc_cache_dir(log=log), 'files', 'md5', dirname, basename)
|
70
67
|
|
71
68
|
|
72
|
-
def diff_cmds(
|
73
|
-
cmds1: list[str],
|
74
|
-
cmds2: list[str],
|
75
|
-
verbose: bool = False,
|
76
|
-
color: bool = False,
|
77
|
-
unified: int | None = None,
|
78
|
-
ignore_whitespace: bool = False,
|
79
|
-
**kwargs,
|
80
|
-
):
|
81
|
-
"""Run two sequences of piped commands and diff their output.
|
82
|
-
|
83
|
-
Args:
|
84
|
-
cmds1: First sequence of commands to pipe together
|
85
|
-
cmds2: Second sequence of commands to pipe together
|
86
|
-
verbose: Whether to print commands being executed
|
87
|
-
color: Whether to show colored diff output
|
88
|
-
unified: Number of unified context lines, or None
|
89
|
-
ignore_whitespace: Whether to ignore whitespace changes
|
90
|
-
**kwargs: Additional arguments passed to subprocess.Popen
|
91
|
-
|
92
|
-
Each command sequence will be piped together before being compared.
|
93
|
-
For example, if cmds1 = ['cat foo.txt', 'sort'], the function will
|
94
|
-
execute 'cat foo.txt | sort' before comparing with cmds2's output.
|
95
|
-
|
96
|
-
Adapted from https://stackoverflow.com/a/28840955"""
|
97
|
-
with named_pipes(n=2) as pipes:
|
98
|
-
(pipe1, pipe2) = pipes
|
99
|
-
diff_cmd = [
|
100
|
-
'diff',
|
101
|
-
*(['-w'] if ignore_whitespace else []),
|
102
|
-
*(['-U', str(unified)] if unified is not None else []),
|
103
|
-
*(['--color=always'] if color else []),
|
104
|
-
pipe1,
|
105
|
-
pipe2,
|
106
|
-
]
|
107
|
-
diff = Popen(diff_cmd)
|
108
|
-
processes = []
|
109
|
-
|
110
|
-
for pipe, cmds in ((pipe1, cmds1), (pipe2, cmds2)):
|
111
|
-
if verbose:
|
112
|
-
err(f"Running pipeline: {' | '.join(cmds)}")
|
113
|
-
|
114
|
-
# Create the pipeline of processes
|
115
|
-
prev_process = None
|
116
|
-
for i, cmd in enumerate(cmds):
|
117
|
-
is_last = i + 1 == len(cmds)
|
118
|
-
|
119
|
-
# For the first process, take input from the original source
|
120
|
-
stdin = None if prev_process is None else prev_process.stdout
|
121
|
-
|
122
|
-
# For the last process, output to the named pipe
|
123
|
-
if is_last:
|
124
|
-
with open(pipe, 'wb', 0) as pipe_fd:
|
125
|
-
proc = Popen(
|
126
|
-
cmd,
|
127
|
-
stdin=stdin,
|
128
|
-
stdout=pipe_fd,
|
129
|
-
close_fds=True,
|
130
|
-
**kwargs
|
131
|
-
)
|
132
|
-
# For intermediate processes, output to a pipe
|
133
|
-
else:
|
134
|
-
proc = Popen(
|
135
|
-
cmd,
|
136
|
-
stdin=stdin,
|
137
|
-
stdout=PIPE,
|
138
|
-
close_fds=True,
|
139
|
-
**kwargs
|
140
|
-
)
|
141
|
-
|
142
|
-
if prev_process is not None:
|
143
|
-
prev_process.stdout.close()
|
144
|
-
|
145
|
-
processes.append(proc)
|
146
|
-
prev_process = proc
|
147
|
-
|
148
|
-
for p in [diff] + processes:
|
149
|
-
p.wait()
|
150
|
-
|
151
|
-
|
152
69
|
@cli.command('diff', short_help='Diff a DVC-tracked file at two commits (or one commit vs. current worktree), optionally passing both through another command first')
|
153
70
|
@option('-c', '--color', is_flag=True, help='Colorize the output')
|
154
71
|
@option('-r', '--refspec', default='HEAD', help='<commit 1>..<commit 2> (compare two commits) or <commit> (compare <commit> to the worktree)')
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dvc-utils
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.7
|
4
4
|
Summary: CLI for diffing DVC files at two commits (or one commit vs. current worktree), optionally passing both through another command first
|
5
5
|
Home-page: https://github.com/runsascoded/dvc-utils
|
6
6
|
Author: Ryan Williams
|
@@ -2,7 +2,7 @@ from setuptools import setup
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name='dvc-utils',
|
5
|
-
version="0.0.
|
5
|
+
version="0.0.7",
|
6
6
|
description="CLI for diffing DVC files at two commits (or one commit vs. current worktree), optionally passing both through another command first",
|
7
7
|
long_description=open("README.md").read(),
|
8
8
|
long_description_content_type="text/markdown",
|
@@ -1,19 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
import shutil
|
3
|
-
import tempfile
|
4
|
-
from contextlib import contextmanager
|
5
|
-
|
6
|
-
|
7
|
-
@contextmanager
|
8
|
-
def named_pipes(n: int = 1):
|
9
|
-
"""Yield a list of paths to named pipes that are created and destroyed
|
10
|
-
|
11
|
-
From https://stackoverflow.com/a/28840955"""
|
12
|
-
dirname = tempfile.mkdtemp()
|
13
|
-
try:
|
14
|
-
paths = [os.path.join(dirname, 'named_pipe' + str(i)) for i in range(n)]
|
15
|
-
for path in paths:
|
16
|
-
os.mkfifo(path)
|
17
|
-
yield paths
|
18
|
-
finally:
|
19
|
-
shutil.rmtree(dirname)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|