Browse Source
Former-commit-id: b1bb0eafa6fcfc488e43dd5a11a157eb99d6ec37 Former-commit-id: 5fa74a312cfbcecd2d28a09691771261d6fdadb1beta
Nathan Smith
12 years ago
141 changed files with 1190 additions and 639 deletions
@ -1 +0,0 @@ |
|||||
../grunt/bin/grunt |
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||||
bce475df23a84d7c332d90bfff3b4b9a19f988ce |
ff71081e3c78e83ececd69a2296e26ffe60d40c6 |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||||
d930a08c4b0d771fe2d2736b0c152d0fa43217ea |
83a6a454a120408efafeaaefb3bfd0c98beb27fb |
@ -1 +1 @@ |
|||||
cmd_Release/bufferutil.node := rm -rf "Release/bufferutil.node" && cp -af "Release/obj.target/bufferutil.node" "Release/bufferutil.node" |
cmd_Release/bufferutil.node := ./gyp-mac-tool flock ./Release/linker.lock c++ -shared -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -install_name @rpath/bufferutil.node -o Release/bufferutil.node Release/obj.target/bufferutil/src/bufferutil.o -undefined dynamic_lookup |
||||
|
@ -1 +0,0 @@ |
|||||
cmd_Release/obj.target/bufferutil.node := flock ./Release/linker.lock g++ -shared -pthread -rdynamic -m64 -Wl,-soname=bufferutil.node -o Release/obj.target/bufferutil.node -Wl,--start-group Release/obj.target/bufferutil/src/bufferutil.o -Wl,--end-group |
|
@ -1,25 +1,21 @@ |
|||||
cmd_Release/obj.target/bufferutil/src/bufferutil.o := g++ '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/jack/.node-gyp/0.10.3/src -I/home/jack/.node-gyp/0.10.3/deps/uv/include -I/home/jack/.node-gyp/0.10.3/deps/v8/include -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d.raw -c -o Release/obj.target/bufferutil/src/bufferutil.o ../src/bufferutil.cc |
cmd_Release/obj.target/bufferutil/src/bufferutil.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/nsmith/.node-gyp/0.10.4/src -I/Users/nsmith/.node-gyp/0.10.4/deps/uv/include -I/Users/nsmith/.node-gyp/0.10.4/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d.raw -c -o Release/obj.target/bufferutil/src/bufferutil.o ../src/bufferutil.cc |
||||
Release/obj.target/bufferutil/src/bufferutil.o: ../src/bufferutil.cc \ |
Release/obj.target/bufferutil/src/bufferutil.o: ../src/bufferutil.cc \ |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8stdint.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8stdint.h \ |
||||
/home/jack/.node-gyp/0.10.3/src/node.h \ |
/Users/nsmith/.node-gyp/0.10.4/src/node.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-unix.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-unix.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/ngx-queue.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/ngx-queue.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-linux.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-darwin.h \ |
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h \ |
/Users/nsmith/.node-gyp/0.10.4/src/node_object_wrap.h \ |
||||
/home/jack/.node-gyp/0.10.3/src/node.h \ |
/Users/nsmith/.node-gyp/0.10.4/src/node_buffer.h |
||||
/home/jack/.node-gyp/0.10.3/src/node_buffer.h \ |
|
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h |
|
||||
../src/bufferutil.cc: |
../src/bufferutil.cc: |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8stdint.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8stdint.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node.h: |
/Users/nsmith/.node-gyp/0.10.4/src/node.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-unix.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-unix.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/ngx-queue.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/ngx-queue.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-linux.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-darwin.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h: |
/Users/nsmith/.node-gyp/0.10.4/src/node_object_wrap.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node.h: |
/Users/nsmith/.node-gyp/0.10.4/src/node_buffer.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node_buffer.h: |
|
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h: |
|
||||
|
@ -1 +0,0 @@ |
|||||
cmd_Release/obj.target/validation.node := flock ./Release/linker.lock g++ -shared -pthread -rdynamic -m64 -Wl,-soname=validation.node -o Release/obj.target/validation.node -Wl,--start-group Release/obj.target/validation/src/validation.o -Wl,--end-group |
|
@ -1,25 +1,21 @@ |
|||||
cmd_Release/obj.target/validation/src/validation.o := g++ '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/jack/.node-gyp/0.10.3/src -I/home/jack/.node-gyp/0.10.3/deps/uv/include -I/home/jack/.node-gyp/0.10.3/deps/v8/include -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/validation/src/validation.o.d.raw -c -o Release/obj.target/validation/src/validation.o ../src/validation.cc |
cmd_Release/obj.target/validation/src/validation.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/nsmith/.node-gyp/0.10.4/src -I/Users/nsmith/.node-gyp/0.10.4/deps/uv/include -I/Users/nsmith/.node-gyp/0.10.4/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/validation/src/validation.o.d.raw -c -o Release/obj.target/validation/src/validation.o ../src/validation.cc |
||||
Release/obj.target/validation/src/validation.o: ../src/validation.cc \ |
Release/obj.target/validation/src/validation.o: ../src/validation.cc \ |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8stdint.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8stdint.h \ |
||||
/home/jack/.node-gyp/0.10.3/src/node.h \ |
/Users/nsmith/.node-gyp/0.10.4/src/node.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-unix.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-unix.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/ngx-queue.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/ngx-queue.h \ |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-linux.h \ |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-darwin.h \ |
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h \ |
/Users/nsmith/.node-gyp/0.10.4/src/node_object_wrap.h \ |
||||
/home/jack/.node-gyp/0.10.3/src/node.h \ |
/Users/nsmith/.node-gyp/0.10.4/src/node_buffer.h |
||||
/home/jack/.node-gyp/0.10.3/src/node_buffer.h \ |
|
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h |
|
||||
../src/validation.cc: |
../src/validation.cc: |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/v8/include/v8stdint.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/v8/include/v8stdint.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node.h: |
/Users/nsmith/.node-gyp/0.10.4/src/node.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-unix.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-unix.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/ngx-queue.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/ngx-queue.h: |
||||
/home/jack/.node-gyp/0.10.3/deps/uv/include/uv-private/uv-linux.h: |
/Users/nsmith/.node-gyp/0.10.4/deps/uv/include/uv-private/uv-darwin.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h: |
/Users/nsmith/.node-gyp/0.10.4/src/node_object_wrap.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node.h: |
/Users/nsmith/.node-gyp/0.10.4/src/node_buffer.h: |
||||
/home/jack/.node-gyp/0.10.3/src/node_buffer.h: |
|
||||
/home/jack/.node-gyp/0.10.3/src/node_object_wrap.h: |
|
||||
|
@ -1 +1 @@ |
|||||
cmd_Release/validation.node := rm -rf "Release/validation.node" && cp -af "Release/obj.target/validation.node" "Release/validation.node" |
cmd_Release/validation.node := ./gyp-mac-tool flock ./Release/linker.lock c++ -shared -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -install_name @rpath/validation.node -o Release/validation.node Release/obj.target/validation/src/validation.o -undefined dynamic_lookup |
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||||
|
cc6e4daa5d1d06ce0421dcb3ac11c5e2db263847 |
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||||
|
50ade9dd343b4ed3f83447d43359715ceba80abf |
Binary file not shown.
@ -0,0 +1,211 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
# Generated by gyp. Do not edit. |
||||
|
# Copyright (c) 2012 Google Inc. All rights reserved. |
||||
|
# Use of this source code is governed by a BSD-style license that can be |
||||
|
# found in the LICENSE file. |
||||
|
|
||||
|
"""Utility functions to perform Xcode-style build steps. |
||||
|
|
||||
|
These functions are executed via gyp-mac-tool when using the Makefile generator. |
||||
|
""" |
||||
|
|
||||
|
import fcntl |
||||
|
import os |
||||
|
import plistlib |
||||
|
import re |
||||
|
import shutil |
||||
|
import string |
||||
|
import subprocess |
||||
|
import sys |
||||
|
|
||||
|
|
||||
|
def main(args): |
||||
|
executor = MacTool() |
||||
|
exit_code = executor.Dispatch(args) |
||||
|
if exit_code is not None: |
||||
|
sys.exit(exit_code) |
||||
|
|
||||
|
|
||||
|
class MacTool(object): |
||||
|
"""This class performs all the Mac tooling steps. The methods can either be |
||||
|
executed directly, or dispatched from an argument list.""" |
||||
|
|
||||
|
def Dispatch(self, args): |
||||
|
"""Dispatches a string command to a method.""" |
||||
|
if len(args) < 1: |
||||
|
raise Exception("Not enough arguments") |
||||
|
|
||||
|
method = "Exec%s" % self._CommandifyName(args[0]) |
||||
|
return getattr(self, method)(*args[1:]) |
||||
|
|
||||
|
def _CommandifyName(self, name_string): |
||||
|
"""Transforms a tool name like copy-info-plist to CopyInfoPlist""" |
||||
|
return name_string.title().replace('-', '') |
||||
|
|
||||
|
def ExecCopyBundleResource(self, source, dest): |
||||
|
"""Copies a resource file to the bundle/Resources directory, performing any |
||||
|
necessary compilation on each resource.""" |
||||
|
extension = os.path.splitext(source)[1].lower() |
||||
|
if os.path.isdir(source): |
||||
|
# Copy tree. |
||||
|
if os.path.exists(dest): |
||||
|
shutil.rmtree(dest) |
||||
|
shutil.copytree(source, dest) |
||||
|
elif extension == '.xib': |
||||
|
return self._CopyXIBFile(source, dest) |
||||
|
elif extension == '.strings': |
||||
|
self._CopyStringsFile(source, dest) |
||||
|
else: |
||||
|
shutil.copyfile(source, dest) |
||||
|
|
||||
|
def _CopyXIBFile(self, source, dest): |
||||
|
"""Compiles a XIB file with ibtool into a binary plist in the bundle.""" |
||||
|
tools_dir = os.environ.get('DEVELOPER_BIN_DIR', '/usr/bin') |
||||
|
args = [os.path.join(tools_dir, 'ibtool'), '--errors', '--warnings', |
||||
|
'--notices', '--output-format', 'human-readable-text', '--compile', |
||||
|
dest, source] |
||||
|
ibtool_section_re = re.compile(r'/\*.*\*/') |
||||
|
ibtool_re = re.compile(r'.*note:.*is clipping its content') |
||||
|
ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) |
||||
|
current_section_header = None |
||||
|
for line in ibtoolout.stdout: |
||||
|
if ibtool_section_re.match(line): |
||||
|
current_section_header = line |
||||
|
elif not ibtool_re.match(line): |
||||
|
if current_section_header: |
||||
|
sys.stdout.write(current_section_header) |
||||
|
current_section_header = None |
||||
|
sys.stdout.write(line) |
||||
|
return ibtoolout.returncode |
||||
|
|
||||
|
def _CopyStringsFile(self, source, dest): |
||||
|
"""Copies a .strings file using iconv to reconvert the input into UTF-16.""" |
||||
|
input_code = self._DetectInputEncoding(source) or "UTF-8" |
||||
|
fp = open(dest, 'w') |
||||
|
args = ['/usr/bin/iconv', '--from-code', input_code, '--to-code', |
||||
|
'UTF-16', source] |
||||
|
subprocess.call(args, stdout=fp) |
||||
|
fp.close() |
||||
|
|
||||
|
def _DetectInputEncoding(self, file_name): |
||||
|
"""Reads the first few bytes from file_name and tries to guess the text |
||||
|
encoding. Returns None as a guess if it can't detect it.""" |
||||
|
fp = open(file_name, 'rb') |
||||
|
try: |
||||
|
header = fp.read(3) |
||||
|
except e: |
||||
|
fp.close() |
||||
|
return None |
||||
|
fp.close() |
||||
|
if header.startswith("\xFE\xFF"): |
||||
|
return "UTF-16BE" |
||||
|
elif header.startswith("\xFF\xFE"): |
||||
|
return "UTF-16LE" |
||||
|
elif header.startswith("\xEF\xBB\xBF"): |
||||
|
return "UTF-8" |
||||
|
else: |
||||
|
return None |
||||
|
|
||||
|
def ExecCopyInfoPlist(self, source, dest): |
||||
|
"""Copies the |source| Info.plist to the destination directory |dest|.""" |
||||
|
# Read the source Info.plist into memory. |
||||
|
fd = open(source, 'r') |
||||
|
lines = fd.read() |
||||
|
fd.close() |
||||
|
|
||||
|
# Go through all the environment variables and replace them as variables in |
||||
|
# the file. |
||||
|
for key in os.environ: |
||||
|
if key.startswith('_'): |
||||
|
continue |
||||
|
evar = '${%s}' % key |
||||
|
lines = string.replace(lines, evar, os.environ[key]) |
||||
|
|
||||
|
# Write out the file with variables replaced. |
||||
|
fd = open(dest, 'w') |
||||
|
fd.write(lines) |
||||
|
fd.close() |
||||
|
|
||||
|
# Now write out PkgInfo file now that the Info.plist file has been |
||||
|
# "compiled". |
||||
|
self._WritePkgInfo(dest) |
||||
|
|
||||
|
def _WritePkgInfo(self, info_plist): |
||||
|
"""This writes the PkgInfo file from the data stored in Info.plist.""" |
||||
|
plist = plistlib.readPlist(info_plist) |
||||
|
if not plist: |
||||
|
return |
||||
|
|
||||
|
# Only create PkgInfo for executable types. |
||||
|
package_type = plist['CFBundlePackageType'] |
||||
|
if package_type != 'APPL': |
||||
|
return |
||||
|
|
||||
|
# The format of PkgInfo is eight characters, representing the bundle type |
||||
|
# and bundle signature, each four characters. If that is missing, four |
||||
|
# '?' characters are used instead. |
||||
|
signature_code = plist.get('CFBundleSignature', '????') |
||||
|
if len(signature_code) != 4: # Wrong length resets everything, too. |
||||
|
signature_code = '?' * 4 |
||||
|
|
||||
|
dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') |
||||
|
fp = open(dest, 'w') |
||||
|
fp.write('%s%s' % (package_type, signature_code)) |
||||
|
fp.close() |
||||
|
|
||||
|
def ExecFlock(self, lockfile, *cmd_list): |
||||
|
"""Emulates the most basic behavior of Linux's flock(1).""" |
||||
|
# Rely on exception handling to report errors. |
||||
|
fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) |
||||
|
fcntl.flock(fd, fcntl.LOCK_EX) |
||||
|
return subprocess.call(cmd_list) |
||||
|
|
||||
|
def ExecFilterLibtool(self, *cmd_list): |
||||
|
"""Calls libtool and filters out 'libtool: file: foo.o has no symbols'.""" |
||||
|
libtool_re = re.compile(r'^libtool: file: .* has no symbols$') |
||||
|
libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE) |
||||
|
_, err = libtoolout.communicate() |
||||
|
for line in err.splitlines(): |
||||
|
if not libtool_re.match(line): |
||||
|
print >>sys.stderr, line |
||||
|
return libtoolout.returncode |
||||
|
|
||||
|
def ExecPackageFramework(self, framework, version): |
||||
|
"""Takes a path to Something.framework and the Current version of that and |
||||
|
sets up all the symlinks.""" |
||||
|
# Find the name of the binary based on the part before the ".framework". |
||||
|
binary = os.path.basename(framework).split('.')[0] |
||||
|
|
||||
|
CURRENT = 'Current' |
||||
|
RESOURCES = 'Resources' |
||||
|
VERSIONS = 'Versions' |
||||
|
|
||||
|
if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): |
||||
|
# Binary-less frameworks don't seem to contain symlinks (see e.g. |
||||
|
# chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). |
||||
|
return |
||||
|
|
||||
|
# Move into the framework directory to set the symlinks correctly. |
||||
|
pwd = os.getcwd() |
||||
|
os.chdir(framework) |
||||
|
|
||||
|
# Set up the Current version. |
||||
|
self._Relink(version, os.path.join(VERSIONS, CURRENT)) |
||||
|
|
||||
|
# Set up the root symlinks. |
||||
|
self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) |
||||
|
self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) |
||||
|
|
||||
|
# Back to where we were before! |
||||
|
os.chdir(pwd) |
||||
|
|
||||
|
def _Relink(self, dest, link): |
||||
|
"""Creates a symlink to |dest| named |link|. If |link| already exists, |
||||
|
it is overwritten.""" |
||||
|
if os.path.lexists(link): |
||||
|
os.remove(link) |
||||
|
os.symlink(dest, link) |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
sys.exit(main(sys.argv[1:])) |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,15 @@ |
|||||
|
lib-cov |
||||
|
*.seed |
||||
|
*.log |
||||
|
*.csv |
||||
|
*.dat |
||||
|
*.out |
||||
|
*.pid |
||||
|
*.gz |
||||
|
|
||||
|
pids |
||||
|
logs |
||||
|
results |
||||
|
|
||||
|
npm-debug.log |
||||
|
node_modules |
@ -0,0 +1,4 @@ |
|||||
|
language: node_js |
||||
|
node_js: |
||||
|
- 0.6 |
||||
|
- 0.8 |
@ -0,0 +1,23 @@ |
|||||
|
Copyright 2013 Thorsten Lorenz. |
||||
|
All rights reserved. |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person |
||||
|
obtaining a copy of this software and associated documentation |
||||
|
files (the "Software"), to deal in the Software without |
||||
|
restriction, including without limitation the rights to use, |
||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the |
||||
|
Software is furnished to do so, subject to the following |
||||
|
conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
||||
|
OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,42 @@ |
|||||
|
# ansicolors [![build status](https://secure.travis-ci.org/thlorenz/ansicolors.png)](http://next.travis-ci.org/thlorenz/ansicolors) |
||||
|
|
||||
|
Functions that surround a string with ansicolor codes so it prints in color. |
||||
|
|
||||
|
## Installation |
||||
|
|
||||
|
npm install ansicolors |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
```js |
||||
|
var colors = require('ansicolors'); |
||||
|
|
||||
|
// foreground colors |
||||
|
var redHerring = colors.red('herring'); |
||||
|
var blueMoon = colors.blue('moon'); |
||||
|
var brighBlueMoon = colors.brightBlue('moon'); |
||||
|
|
||||
|
console.log(redHerring); // this will print 'herring' in red |
||||
|
console.log(blueMoon); // this 'moon' in blue |
||||
|
console.log(brightBlueMoon); // I think you got the idea |
||||
|
|
||||
|
// background colors |
||||
|
console.log(colors.bgYellow('printed on yellow background')); |
||||
|
console.log(colors.bgBrightBlue('printed on bright blue background')); |
||||
|
|
||||
|
// mixing background and foreground colors |
||||
|
// below two lines have same result (order in which bg and fg are combined doesn't matter) |
||||
|
console.log(colors.bgYellow(colors.blue('printed on yellow background in blue'))); |
||||
|
console.log(colors.blue(colors.bgYellow('printed on yellow background in blue'))); |
||||
|
``` |
||||
|
|
||||
|
## Tests |
||||
|
|
||||
|
Look at the [tests](https://github.com/thlorenz/ansicolors/blob/master/test/ansicolors.js) to see more examples and/or run them via: |
||||
|
|
||||
|
npm explore ansicolors && npm test |
||||
|
|
||||
|
## Alternatives |
||||
|
|
||||
|
**ansicolors** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, |
||||
|
I'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js). |
@ -0,0 +1,55 @@ |
|||||
|
// ColorCodes explained: http://www.termsys.demon.co.uk/vtansi.htm
|
||||
|
'use strict'; |
||||
|
|
||||
|
var colorNums = { |
||||
|
white : 37 |
||||
|
, black : 30 |
||||
|
, blue : 34 |
||||
|
, cyan : 36 |
||||
|
, green : 32 |
||||
|
, magenta : 35 |
||||
|
, red : 31 |
||||
|
, yellow : 33 |
||||
|
, brightBlack : 90 |
||||
|
, brightRed : 91 |
||||
|
, brightGreen : 92 |
||||
|
, brightYellow : 93 |
||||
|
, brightBlue : 94 |
||||
|
, brightMagenta : 95 |
||||
|
, brightCyan : 96 |
||||
|
, brightWhite : 97 |
||||
|
} |
||||
|
, backgroundColorNums = { |
||||
|
bgBlack : 40 |
||||
|
, bgRed : 41 |
||||
|
, bgGreen : 42 |
||||
|
, bgYellow : 43 |
||||
|
, bgBlue : 44 |
||||
|
, bgMagenta : 45 |
||||
|
, bgCyan : 46 |
||||
|
, bgWhite : 47 |
||||
|
, bgBrightBlack : 100 |
||||
|
, bgBrightRed : 101 |
||||
|
, bgBrightGreen : 102 |
||||
|
, bgBrightYellow : 103 |
||||
|
, bgBrightBlue : 104 |
||||
|
, bgBrightMagenta : 105 |
||||
|
, bgBrightCyan : 106 |
||||
|
, bgBrightWhite : 107 |
||||
|
} |
||||
|
, colors = {}; |
||||
|
|
||||
|
|
||||
|
Object.keys(colorNums).forEach(function (k) { |
||||
|
colors[k] = function (s) { |
||||
|
return '\u001b[' + colorNums[k] + 'm' + s + '\u001b[39m'; |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
Object.keys(backgroundColorNums).forEach(function (k) { |
||||
|
colors[k] = function (s) { |
||||
|
return '\u001b[' + backgroundColorNums[k] + 'm' + s + '\u001b[49m'; |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
module.exports = colors; |
@ -0,0 +1,30 @@ |
|||||
|
{ |
||||
|
"name": "ansicolors", |
||||
|
"version": "0.2.1", |
||||
|
"description": "Functions that surround a string with ansicolor codes so it prints in color.", |
||||
|
"main": "ansicolors.js", |
||||
|
"scripts": { |
||||
|
"test": "node test/*.js" |
||||
|
}, |
||||
|
"repository": { |
||||
|
"type": "git", |
||||
|
"url": "git://github.com/thlorenz/ansicolors.git" |
||||
|
}, |
||||
|
"keywords": [ |
||||
|
"ansi", |
||||
|
"colors", |
||||
|
"highlight", |
||||
|
"string" |
||||
|
], |
||||
|
"author": { |
||||
|
"name": "Thorsten Lorenz", |
||||
|
"email": "thlorenz@gmx.de", |
||||
|
"url": "thlorenz.com" |
||||
|
}, |
||||
|
"license": "MIT", |
||||
|
"readmeFilename": "README.md", |
||||
|
"gitHead": "858847ca28e8b360d9b70eee0592700fa2ab087d", |
||||
|
"readme": "# ansicolors [![build status](https://secure.travis-ci.org/thlorenz/ansicolors.png)](http://next.travis-ci.org/thlorenz/ansicolors)\n\nFunctions that surround a string with ansicolor codes so it prints in color.\n\n## Installation\n\n npm install ansicolors\n\n## Usage\n\n```js\nvar colors = require('ansicolors');\n\n// foreground colors\nvar redHerring = colors.red('herring');\nvar blueMoon = colors.blue('moon');\nvar brighBlueMoon = colors.brightBlue('moon');\n\nconsole.log(redHerring); // this will print 'herring' in red\nconsole.log(blueMoon); // this 'moon' in blue\nconsole.log(brightBlueMoon); // I think you got the idea\n\n// background colors\nconsole.log(colors.bgYellow('printed on yellow background'));\nconsole.log(colors.bgBrightBlue('printed on bright blue background'));\n\n// mixing background and foreground colors\n// below two lines have same result (order in which bg and fg are combined doesn't matter)\nconsole.log(colors.bgYellow(colors.blue('printed on yellow background in blue')));\nconsole.log(colors.blue(colors.bgYellow('printed on yellow background in blue')));\n```\n\n## Tests\n\nLook at the [tests](https://github.com/thlorenz/ansicolors/blob/master/test/ansicolors.js) to see more examples and/or run them via: \n\n npm explore ansicolors && npm test\n\n## Alternatives\n\n**ansicolors** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, \nI'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).\n", |
||||
|
"_id": "ansicolors@0.2.1", |
||||
|
"_from": "ansicolors@~0.2.1" |
||||
|
} |
@ -0,0 +1,55 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
var assert = require('assert') |
||||
|
, colors = require('..'); |
||||
|
|
||||
|
console.log('Foreground colors ..'); |
||||
|
|
||||
|
assert.equal(colors.white('printed in white'), '\u001b[37mprinted in white\u001b[39m'); |
||||
|
|
||||
|
assert.equal(colors.black('printed in black'), '\u001b[30mprinted in black\u001b[39m'); |
||||
|
assert.equal(colors.brightBlack('printed in bright black'), '\u001b[90mprinted in bright black\u001b[39m'); |
||||
|
|
||||
|
assert.equal(colors.green('printed in green'), '\u001b[32mprinted in green\u001b[39m'); |
||||
|
assert.equal(colors.brightGreen('printed in bright green'), '\u001b[92mprinted in bright green\u001b[39m'); |
||||
|
|
||||
|
assert.equal(colors.red('printed in red'), '\u001b[31mprinted in red\u001b[39m'); |
||||
|
assert.equal(colors.brightRed('printed in bright red'), '\u001b[91mprinted in bright red\u001b[39m'); |
||||
|
|
||||
|
console.log('OK'); |
||||
|
|
||||
|
console.log('Background colors ..'); |
||||
|
|
||||
|
assert.equal( |
||||
|
colors.bgBlack('printed with black background') |
||||
|
, '\u001b[40mprinted with black background\u001b[49m' |
||||
|
); |
||||
|
|
||||
|
assert.equal( |
||||
|
colors.bgYellow('printed with yellow background') |
||||
|
, '\u001b[43mprinted with yellow background\u001b[49m' |
||||
|
); |
||||
|
assert.equal( |
||||
|
colors.bgBrightYellow('printed with bright yellow background') |
||||
|
, '\u001b[103mprinted with bright yellow background\u001b[49m' |
||||
|
); |
||||
|
|
||||
|
assert.equal( |
||||
|
colors.bgWhite('printed with white background') |
||||
|
, '\u001b[47mprinted with white background\u001b[49m' |
||||
|
); |
||||
|
|
||||
|
console.log('OK'); |
||||
|
|
||||
|
console.log('Mixing background and foreground colors ..'); |
||||
|
|
||||
|
assert.equal( |
||||
|
colors.blue(colors.bgYellow('printed in blue with yellow background')) |
||||
|
, '\u001b[34m\u001b[43mprinted in blue with yellow background\u001b[49m\u001b[39m' |
||||
|
); |
||||
|
assert.equal( |
||||
|
colors.bgYellow(colors.blue('printed in blue with yellow background again')) |
||||
|
, '\u001b[43m\u001b[34mprinted in blue with yellow background again\u001b[39m\u001b[49m' |
||||
|
); |
||||
|
|
||||
|
console.log('OK'); |
@ -0,0 +1,15 @@ |
|||||
|
lib-cov |
||||
|
*.seed |
||||
|
*.log |
||||
|
*.csv |
||||
|
*.dat |
||||
|
*.out |
||||
|
*.pid |
||||
|
*.gz |
||||
|
|
||||
|
pids |
||||
|
logs |
||||
|
results |
||||
|
|
||||
|
npm-debug.log |
||||
|
node_modules |
@ -0,0 +1,4 @@ |
|||||
|
language: node_js |
||||
|
node_js: |
||||
|
- 0.6 |
||||
|
- 0.8 |
@ -0,0 +1,23 @@ |
|||||
|
Copyright 2013 Thorsten Lorenz. |
||||
|
All rights reserved. |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person |
||||
|
obtaining a copy of this software and associated documentation |
||||
|
files (the "Software"), to deal in the Software without |
||||
|
restriction, including without limitation the rights to use, |
||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the |
||||
|
Software is furnished to do so, subject to the following |
||||
|
conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
||||
|
OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,69 @@ |
|||||
|
# ansistyles [![build status](https://secure.travis-ci.org/thlorenz/ansistyles.png)](http://next.travis-ci.org/thlorenz/ansistyles) |
||||
|
|
||||
|
Functions that surround a string with ansistyle codes so it prints in style. |
||||
|
|
||||
|
## Installation |
||||
|
|
||||
|
npm install ansistyles |
||||
|
|
||||
|
## Usage |
||||
|
|
||||
|
```js |
||||
|
var styles = require('ansistyles'); |
||||
|
|
||||
|
console.log(styles.bright('hello world')); // prints hello world in 'bright' white |
||||
|
console.log(styles.underline('hello world')); // prints hello world underlined |
||||
|
console.log(styles.inverse('hello world')); // prints hello world black on white |
||||
|
``` |
||||
|
|
||||
|
## Combining with ansicolors |
||||
|
|
||||
|
Get the ansicolors module: |
||||
|
|
||||
|
npm install ansicolors |
||||
|
|
||||
|
```js |
||||
|
var styles = require('ansistyles') |
||||
|
, colors = require('ansicolors'); |
||||
|
|
||||
|
console.log( |
||||
|
// prints hello world underlined in blue on a green background |
||||
|
colors.bgGreen(colors.blue(styles.underline('hello world'))) |
||||
|
); |
||||
|
``` |
||||
|
|
||||
|
## Tests |
||||
|
|
||||
|
Look at the [tests](https://github.com/thlorenz/ansistyles/blob/master/test/ansistyles.js) to see more examples and/or run them via: |
||||
|
|
||||
|
npm explore ansistyles && npm test |
||||
|
|
||||
|
## More Styles |
||||
|
|
||||
|
As you can see from [here](https://github.com/thlorenz/ansistyles/blob/master/ansistyles.js#L4-L15), more styles are available, |
||||
|
but didn't have any effect on the terminals that I tested on Mac Lion and Ubuntu Linux. |
||||
|
|
||||
|
I included them for completeness, but didn't show them in the examples because they seem to have no effect. |
||||
|
|
||||
|
### reset |
||||
|
|
||||
|
A style reset function is also included, please note however that this is not nestable. |
||||
|
|
||||
|
Therefore the below only underlines `hell` only, but not `world`. |
||||
|
|
||||
|
```js |
||||
|
console.log(styles.underline('hell' + styles.reset('o') + ' world')); |
||||
|
``` |
||||
|
|
||||
|
It is essentially the same as: |
||||
|
|
||||
|
```js |
||||
|
console.log(styles.underline('hell') + styles.reset('') + 'o world'); |
||||
|
``` |
||||
|
|
||||
|
|
||||
|
|
||||
|
## Alternatives |
||||
|
|
||||
|
**ansistyles** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, |
||||
|
I'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js). |
@ -0,0 +1,38 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
/* |
||||
|
* Info: http://www.termsys.demon.co.uk/vtansi.htm#colors
|
||||
|
* Following caveats |
||||
|
* bright - brightens the color (bold-blue is same as brigthtBlue) |
||||
|
* dim - nothing on Mac or Linux |
||||
|
* italic - nothing on Mac or Linux |
||||
|
* underline - underlines string |
||||
|
* blink - nothing on Mac or linux |
||||
|
* inverse - background becomes foreground and vice versa |
||||
|
* |
||||
|
* In summary, the only styles that work are: |
||||
|
* - bright, underline and inverse |
||||
|
* - the others are only included for completeness |
||||
|
*/ |
||||
|
|
||||
|
var styleNums = { |
||||
|
reset : [0, 22] |
||||
|
, bright : [1, 22] |
||||
|
, dim : [2, 22] |
||||
|
, italic : [3, 23] |
||||
|
, underline : [4, 24] |
||||
|
, blink : [5, 25] |
||||
|
, inverse : [7, 27] |
||||
|
} |
||||
|
, styles = {} |
||||
|
; |
||||
|
|
||||
|
Object.keys(styleNums).forEach(function (k) { |
||||
|
styles[k] = function (s) { |
||||
|
var open = styleNums[k][0] |
||||
|
, close = styleNums[k][1]; |
||||
|
return '\u001b[' + open + 'm' + s + '\u001b[' + close + 'm'; |
||||
|
}; |
||||
|
}); |
||||
|
|
||||
|
module.exports = styles; |
@ -0,0 +1,30 @@ |
|||||
|
{ |
||||
|
"name": "ansistyles", |
||||
|
"version": "0.1.1", |
||||
|
"description": "Functions that surround a string with ansistyle codes so it prints in style.", |
||||
|
"main": "ansistyles.js", |
||||
|
"scripts": { |
||||
|
"test": "node test/ansistyles.js" |
||||
|
}, |
||||
|
"repository": { |
||||
|
"type": "git", |
||||
|
"url": "git://github.com/thlorenz/ansistyles.git" |
||||
|
}, |
||||
|
"keywords": [ |
||||
|
"ansi", |
||||
|
"style", |
||||
|
"terminal", |
||||
|
"console" |
||||
|
], |
||||
|
"author": { |
||||
|
"name": "Thorsten Lorenz", |
||||
|
"email": "thlorenz@gmx.de", |
||||
|
"url": "thlorenz.com" |
||||
|
}, |
||||
|
"license": "MIT", |
||||
|
"readmeFilename": "README.md", |
||||
|
"gitHead": "27bf1bc65231bcc7fd109bf13b13601b51f8cd04", |
||||
|
"readme": "# ansistyles [![build status](https://secure.travis-ci.org/thlorenz/ansistyles.png)](http://next.travis-ci.org/thlorenz/ansistyles)\n\nFunctions that surround a string with ansistyle codes so it prints in style.\n\n## Installation\n\n npm install ansistyles\n\n## Usage\n\n```js\nvar styles = require('ansistyles');\n\nconsole.log(styles.bright('hello world')); // prints hello world in 'bright' white\nconsole.log(styles.underline('hello world')); // prints hello world underlined\nconsole.log(styles.inverse('hello world')); // prints hello world black on white\n```\n\n## Combining with ansicolors\n\nGet the ansicolors module:\n\n npm install ansicolors\n\n```js\nvar styles = require('ansistyles')\n , colors = require('ansicolors');\n\n console.log(\n // prints hello world underlined in blue on a green background\n colors.bgGreen(colors.blue(styles.underline('hello world'))) \n );\n```\n\n## Tests\n\nLook at the [tests](https://github.com/thlorenz/ansistyles/blob/master/test/ansistyles.js) to see more examples and/or run them via: \n\n npm explore ansistyles && npm test\n\n## More Styles\n\nAs you can see from [here](https://github.com/thlorenz/ansistyles/blob/master/ansistyles.js#L4-L15), more styles are available,\nbut didn't have any effect on the terminals that I tested on Mac Lion and Ubuntu Linux.\n\nI included them for completeness, but didn't show them in the examples because they seem to have no effect.\n\n### reset\n\nA style reset function is also included, please note however that this is not nestable.\n\nTherefore the below only underlines `hell` only, but not `world`.\n\n```js\nconsole.log(styles.underline('hell' + styles.reset('o') + ' world'));\n```\n\nIt is essentially the same as:\n\n```js\nconsole.log(styles.underline('hell') + styles.reset('') + 'o world');\n```\n\n\n\n## Alternatives\n\n**ansistyles** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, \nI'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).\n", |
||||
|
"_id": "ansistyles@0.1.1", |
||||
|
"_from": "ansistyles@~0.1.1" |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
'use strict'; |
||||
|
/*jshint asi: true */ |
||||
|
var assert = require('assert') |
||||
|
, styles = require('../') |
||||
|
|
||||
|
function inspect(obj, depth) { |
||||
|
console.log(require('util').inspect(obj, false, depth || 5, true)); |
||||
|
} |
||||
|
|
||||
|
assert.equal(styles.reset('reset'), '\u001b[0mreset\u001b[22m', 'reset') |
||||
|
assert.equal(styles.underline('underlined'), '\u001b[4munderlined\u001b[24m', 'underline') |
||||
|
assert.equal(styles.bright('bright'), '\u001b[1mbright\u001b[22m', 'bright') |
||||
|
assert.equal(styles.inverse('inversed'), '\u001b[7minversed\u001b[27m', 'inverse') |
||||
|
|
||||
|
console.log('OK'); |
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||||
fa1e479a8de612623436e18c57c2c4f2cf16fefa |
14e6566770b531719e38852b5cc7d1af2e1d2e23 |
File diff suppressed because one or more lines are too long
@ -1 +1 @@ |
|||||
9318e21857c16df7b5d6c61b0476c4ef6414b038 |
cb40f28c60011993a8f34536b8267e0bf1ff8b95 |
@ -1,25 +0,0 @@ |
|||||
|
|
||||
var http = require('http'); |
|
||||
|
|
||||
var times = 50; |
|
||||
|
|
||||
while (times--) { |
|
||||
var req = http.request({ |
|
||||
port: 3000 |
|
||||
, method: 'POST' |
|
||||
, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } |
|
||||
}); |
|
||||
|
|
||||
req.on('response', function(res){ |
|
||||
console.log(res.statusCode); |
|
||||
}); |
|
||||
|
|
||||
var n = 500000; |
|
||||
while (n--) { |
|
||||
req.write('foo=bar&bar=baz&'); |
|
||||
} |
|
||||
|
|
||||
req.write('foo=bar&bar=baz'); |
|
||||
|
|
||||
req.end(); |
|
||||
} |
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue