Hello community,

here is the log from the commit of package julia for openSUSE:Factory checked 
in at 2015-03-27 09:41:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/julia (Old)
 and      /work/SRC/openSUSE:Factory/.julia.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "julia"

Changes:
--------
--- /work/SRC/openSUSE:Factory/julia/julia.changes      2015-02-22 
17:26:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.julia.new/julia.changes 2015-03-27 
09:41:40.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Mar 25 16:20:44 UTC 2015 - roni...@gmail.com
+
+- Update to version 0.3.7
+  * Bugfix release, no changelog available
+
+-------------------------------------------------------------------

Old:
----
  julia-0.3.6.tar.gz

New:
----
  julia-0.3.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ julia.spec ++++++
--- /var/tmp/diff_new_pack.YCeCLt/_old  2015-03-27 09:41:41.000000000 +0100
+++ /var/tmp/diff_new_pack.YCeCLt/_new  2015-03-27 09:41:41.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           julia
-Version:        0.3.6
+Version:        0.3.7
 Release:        0
 %define rmath_ver 226598f
 %define libuv_ver abcbb0c


++++++ julia-0.3.6.tar.gz -> julia-0.3.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/.travis.yml new/julia-0.3.7/.travis.yml
--- old/julia-0.3.6/.travis.yml 2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/.travis.yml 2015-03-23 22:36:21.000000000 +0100
@@ -29,7 +29,8 @@
         brew tap staticfloat/julia;
         brew rm --force $(brew deps julia);
         brew update;
-        sed -i '' -e 
"s@https://downloads.sf.net/project/machomebrew/Bottles@http://cache.e.ip.saba.us@";
 /usr/local/Library/Homebrew/software_spec.rb;
+        sed -i '' -e 
"s@https://downloads.sf.net/project/machomebrew/Bottles@https://cache.e.ip.saba.us/https://downloads.sf.net/project/machomebrew/Bottles@";
 /usr/local/Library/Homebrew/software_spec.rb;
+        sed -i '' -e 
"s@https://homebrew.bintray.com@https://cache.e.ip.saba.us/https://homebrew.bintray.com@";
 /usr/local/Library/Homebrew/software_spec.rb;
         brew install -v --only-dependencies julia;
         BUILDOPTS="USECLANG=1 LLVM_CONFIG=$(brew --prefix 
llvm33-julia)/bin/llvm-config-3.3 VERBOSE=1 USE_BLAS64=0 
SUITESPARSE_INC=-I$(brew --prefix suite-sparse42-julia)/include";
         BUILDOPTS="$BUILDOPTS LIBBLAS=-lopenblas LIBBLASNAME=libopenblas 
LIBLAPACK=-lopenblas LIBLAPACKNAME=libopenblas";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/Makefile new/julia-0.3.7/Makefile
--- old/julia-0.3.6/Makefile    2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/Makefile    2015-03-23 22:36:21.000000000 +0100
@@ -12,9 +12,9 @@
 INSTALL_F = contrib/install.sh 644
 INSTALL_M = contrib/install.sh 755
 
-#file name of make dist result
-ifeq ($(JULIA_DIST_TARNAME),)
-       JULIA_DIST_TARNAME = julia-$(JULIA_COMMIT)-$(OS)-$(ARCH)
+#file name of make binary-dist result
+ifeq ($(JULIA_BINARYDIST_TARNAME),)
+       JULIA_BINARYDIST_TARNAME = julia-$(JULIA_COMMIT)-$(OS)-$(ARCH)
 endif
 
 all: default
@@ -71,9 +71,9 @@
 
        @echo 1. Remove deprecations in base/deprecated.jl
        @echo 2. Bump VERSION
-       @echo 3. Create tag, push to github "\(git tag v\`cat VERSION\` && git 
push --tags\)"
-       @echo 4. Clean out old .tar.gz files living in deps/, "\`git clean 
-fdx\`" seems to work
-       @echo 5. Replace github release tarball with tarball created from make 
source-dist
+       @echo 3. Create tag, push to github "\(git tag v\`cat VERSION\` && git 
push --tags\)"           #"` # These comments deal with incompetent syntax 
highlighting rules
+       @echo 4. Clean out old .tar.gz files living in deps/, "\`git clean 
-fdx\`" seems to work        #"`
+       @echo 5. Replace github release tarball with tarball created from make 
full-source-dist
        @echo 6. Follow packaging instructions in DISTRIBUTING.md to create 
binary packages for all platforms
        @echo 7. Upload to AWS, update http://julialang.org/downloads and 
http://status.julialang.org/stable links
        @echo 8. Announce on mailing lists
@@ -301,21 +301,21 @@
        mkdir -p $(DESTDIR)$(sysconfdir)
        cp -R $(build_sysconfdir)/julia $(DESTDIR)$(sysconfdir)/
 
-dist-clean:
+distclean dist-clean:
        rm -fr julia-*.tar.gz julia*.exe julia-*.7z julia-$(JULIA_COMMIT)
 
-dist: dist-clean
+binary-dist dist: distclean
 ifeq ($(USE_SYSTEM_BLAS),0)
 ifneq ($(OPENBLAS_DYNAMIC_ARCH),1)
-       @echo OpenBLAS must be rebuilt with OPENBLAS_DYNAMIC_ARCH=1 to use dist 
target
+       @echo OpenBLAS must be rebuilt with OPENBLAS_DYNAMIC_ARCH=1 to use 
binary-dist target
        @false
 endif
 endif
 ifneq ($(prefix),$(abspath julia-$(JULIA_COMMIT)))
-       $(error prefix must not be set for make dist)
+       $(error prefix must not be set for make binary-dist)
 endif
 ifneq ($(DESTDIR),)
-       $(error DESTDIR must not be set for make dist)
+       $(error DESTDIR must not be set for make binary-dist)
 endif
        @$(MAKE) install
        cp LICENSE.md $(prefix)
@@ -342,7 +342,7 @@
        -rm -f $(DESTDIR)$(private_libdir)/sys.$(SHLIB_EXT)
 
        [ ! -d dist-extras ] || ( cd dist-extras && \
-               cp 7z.exe 7z.dll libexpat-1.dll zlib1.dll $(bindir) && \
+               cp 7z.exe 7z.dll libexpat-1.dll zlib1.dll libgfortran-3.dll 
libquadmath-0.dll libstdc++-6.dll libgcc_s_s*-1.dll libssp-0.dll $(bindir) && \
            mkdir $(DESTDIR)$(prefix)/Git && \
            7z x PortableGit.7z -o"$(DESTDIR)$(prefix)/Git" && \
            echo "[core] eol = lf" >> "$(DESTDIR)$(prefix)/Git/etc/gitconfig" 
&& \
@@ -362,30 +362,30 @@
        cat ./contrib/windows/7zS.sfx ./contrib/windows/7zSFX-config.txt 
"julia-install-$(JULIA_COMMIT)-$(ARCH).7z" > 
"julia-${JULIA_VERSION}-${ARCH}.exe"
        -rm -f julia-installer.exe
 else
-       $(TAR) zcvf $(JULIA_DIST_TARNAME).tar.gz julia-$(JULIA_COMMIT)
+       $(TAR) zcvf $(JULIA_BINARYDIST_TARNAME).tar.gz julia-$(JULIA_COMMIT)
 endif
        rm -fr $(prefix)
 
 
-source-dist: git-submodules
+full-source-dist source-dist: git-submodules
        # Save git information
        -@$(MAKE) -C base version_git.jl.phony
        # Get all the dependencies downloaded
        @$(MAKE) -C deps getall
 
-       # Create file source-dist.tmp to hold all the filenames that go into 
the tarball
-       echo "base/version_git.jl" > source-dist.tmp
-       git ls-files >> source-dist.tmp
-       ls deps/*.tar.gz deps/*.tar.bz2 deps/*.tgz deps/*.zip >> source-dist.tmp
-       git submodule --quiet foreach 'git ls-files | sed "s&^&$$path/&"' >> 
source-dist.tmp
+       # Create file full-source-dist.tmp to hold all the filenames that go 
into the tarball
+       echo "base/version_git.jl" > full-source-dist.tmp
+       git ls-files >> full-source-dist.tmp
+       ls deps/*.tar.gz deps/*.tar.bz2 deps/*.tgz deps/*.zip >> 
full-source-dist.tmp
+       git submodule --quiet foreach 'git ls-files | sed "s&^&$$path/&"' >> 
full-source-dist.tmp
 
        # Remove unwanted files
-       sed -e '/\.git/d' -e '/\.travis/d' source-dist.tmp > source-dist.tmp1
+       sed -e '/\.git/d' -e '/\.travis/d' full-source-dist.tmp > 
full-source-dist.tmp1
 
        # Prefix everything with the current directory name (usually "julia"), 
then create tarball
        DIRNAME=$$(basename $$(pwd)); \
-       sed -e "s_.*_$$DIRNAME/&_" source-dist.tmp1 > source-dist.tmp; \
-       cd ../ && tar -cz -T $$DIRNAME/source-dist.tmp --no-recursion -f 
$$DIRNAME/julia-$(JULIA_VERSION)_$(JULIA_COMMIT).tar.gz
+       sed -e "s_.*_$$DIRNAME/&_" full-source-dist.tmp1 > 
full-source-dist.tmp; \
+       cd ../ && tar -cz -T $$DIRNAME/full-source-dist.tmp --no-recursion -f 
$$DIRNAME/julia-$(JULIA_VERSION)_$(JULIA_COMMIT).tar.gz
 
 clean: | $(CLEAN_TARGETS)
        @$(MAKE) -C base clean
@@ -397,7 +397,7 @@
        done
        @rm -f julia
        @rm -f *~ *# *.tar.gz
-       @rm -f $(build_bindir)/stringreplace source-dist.tmp source-dist.tmp1
+       @rm -f $(build_bindir)/stringreplace full-source-dist.tmp 
full-source-dist.tmp1
        @rm -fr $(build_private_libdir)
 # Temporarily add this line to the Makefile to remove extras
        @rm -fr $(build_datarootdir)/julia/extras
@@ -418,7 +418,7 @@
 .PHONY: default debug release julia-debug julia-release \
        test testall testall1 test-* clean distcleanall cleanall \
        run-julia run-julia-debug run-julia-release run \
-       install dist source-dist git-submodules
+       install binary-dist dist full-source-dist source-dist git-submodules
 
 test: release
        @$(MAKE) $(QUIET_MAKE) -C test default
@@ -451,20 +451,16 @@
        cd dist-extras && \
        $(JLDOWNLOAD) http://downloads.sourceforge.net/sevenzip/7z920.exe && \
        7z x -y 7z920.exe 7z.exe 7z.dll && \
-       $(JLDOWNLOAD) 
http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1/noarch/mingw32-libexpat1-2.0.1-8.1.noarch.rpm
 && \
-       mv mingw32-libexpat1-*.rpm mingw-libexpat.rpm && \
-       $(JLDOWNLOAD) 
http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1/noarch/mingw32-zlib-1.2.8-3.12.noarch.rpm
 && \
-       mv mingw32-zlib-*.rpm mingw-zlib.rpm
+       ../contrib/windows/winrpm.sh 
http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_13.1 \
+       "mingw32-libgfortran3 mingw32-libquadmath0 mingw32-libstdc++6 
mingw32-libgcc_s_sjlj1 mingw32-libssp0 mingw32-libexpat1 mingw32-zlib1"
 else ifeq ($(ARCH),x86_64)
        cd dist-extras && \
        $(JLDOWNLOAD) 7z920-x64.msi 
http://downloads.sourceforge.net/sevenzip/7z920-x64.msi && \
        7z x -y 7z920-x64.msi _7z.exe _7z.dll && \
        mv _7z.dll 7z.dll && \
        mv _7z.exe 7z.exe && \
-       $(JLDOWNLOAD) 
http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1/noarch/mingw64-libexpat1-2.0.1-7.1.noarch.rpm
 && \
-       mv mingw64-libexpat1-*.rpm mingw-libexpat.rpm && \
-       $(JLDOWNLOAD) 
http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1/noarch/mingw64-zlib-1.2.8-3.1.noarch.rpm
 && \
-       mv mingw64-zlib-*.rpm mingw-zlib.rpm
+       ../contrib/windows/winrpm.sh 
http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1 \
+       "mingw64-libgfortran3 mingw64-libquadmath0 mingw64-libstdc++6 
mingw64-libgcc_s_seh1 mingw64-libssp0 mingw64-libexpat1 mingw64-zlib1"
 else
        $(error no win-extras target for ARCH=$(ARCH))
 endif
@@ -477,8 +473,4 @@
        $(call spawn,./7z.exe) x -y -onsis nsis-2.46.5-Unicode-setup.exe && \
        chmod a+x ./nsis/makensis.exe && \
        chmod a+x busybox.exe && \
-       7z x -y mingw-libexpat.rpm -so > mingw-libexpat.cpio && \
-       7z e -y mingw-libexpat.cpio && \
-       7z x -y mingw-zlib.rpm -so > mingw-zlib.cpio && \
-       7z e -y mingw-zlib.cpio && \
        $(JLDOWNLOAD) PortableGit.7z 
https://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20141217/PortableGit-1.9.5-preview20141217.7z
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/NEWS.md new/julia-0.3.7/NEWS.md
--- old/julia-0.3.6/NEWS.md     2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/NEWS.md     2015-03-23 22:36:21.000000000 +0100
@@ -1,3 +1,11 @@
+Julia v0.3.7 Release Notes
+==========================
+
+Library improvements
+--------------------
+
+  * `deepcopy` recurses through immutable types and makes copies of their 
mutable fields ([#8560]).
+
 Julia v0.3.4 Release Notes
 ==========================
 
@@ -925,4 +933,5 @@
 [#7464]: https://github.com/JuliaLang/julia/issues/7464
 [#7513]: https://github.com/JuliaLang/julia/issues/7513
 [#7647]: https://github.com/JuliaLang/julia/issues/7647
+[#8560]: https://github.com/JuliaLang/julia/issues/8560
 [#9161]: https://github.com/JuliaLang/julia/issues/9161
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/VERSION new/julia-0.3.7/VERSION
--- old/julia-0.3.6/VERSION     2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/VERSION     2015-03-23 22:36:21.000000000 +0100
@@ -1 +1 @@
-0.3.6
+0.3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/appveyor.yml new/julia-0.3.7/appveyor.yml
--- old/julia-0.3.6/appveyor.yml        2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/appveyor.yml        2015-03-23 22:36:21.000000000 +0100
@@ -34,7 +34,6 @@
   - mingw-w64-bin-x86_64-20140102.7z
   - llvm-3.3-i686-w64-mingw32-juliadeps.7z
   - llvm-3.3-x86_64-w64-mingw32-juliadeps.7z
-  - make-3.81-2-msys-1.0.11-bin.tar.lzma
   - jq.exe
 
 build_script:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/base/array.jl 
new/julia-0.3.7/base/array.jl
--- old/julia-0.3.6/base/array.jl       2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/base/array.jl       2015-03-23 22:36:21.000000000 +0100
@@ -558,6 +558,7 @@
 
 function deleteat!{T<:Integer}(a::Vector, r::UnitRange{T})
     n = length(a)
+    isempty(r) && return a
     f = first(r)
     l = last(r)
     if !(1 <= f && l <= n)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/base/deepcopy.jl 
new/julia-0.3.7/base/deepcopy.jl
--- old/julia-0.3.6/base/deepcopy.jl    2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/base/deepcopy.jl    2015-03-23 22:36:21.000000000 +0100
@@ -27,20 +27,23 @@
 end
 
 function _deepcopy_t(x, T::DataType, stackdict::ObjectIdDict)
-    if T.names===() || !T.mutable
-        return x
-    end
-    ret = ccall(:jl_new_struct_uninit, Any, (Any,), T)
-    stackdict[x] = ret
-    for i in 1:length(T.names)
-        if isdefined(x,i)
-            ret.(i) = deepcopy_internal(x.(i), stackdict)
+    isbits(T) | isempty(T.names) && return x
+    if T.mutable
+        y = ccall(:jl_new_struct_uninit, Any, (Any,), T)
+        stackdict[x] = y
+        for i in 1:length(T.names)
+            if isdefined(x,i)
+                y.(i) = deepcopy_internal(x.(i), stackdict)
+            end
         end
+    else
+        fields = Any[deepcopy_internal(x.(i), stackdict) for i in 
1:length(T.names)]
+        y = ccall(:jl_new_structv, Any, (Any, Ptr{Void}, Uint32),
+                  T, pointer(fields), length(fields))
     end
-    return ret
+    return y::T
 end
 
-
 function deepcopy_internal(x::Array, stackdict::ObjectIdDict)
     if haskey(stackdict, x)
         return stackdict[x]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/base/linalg/sparse.jl 
new/julia-0.3.7/base/linalg/sparse.jl
--- old/julia-0.3.6/base/linalg/sparse.jl       2015-02-17 23:12:25.000000000 
+0100
+++ new/julia-0.3.7/base/linalg/sparse.jl       2015-03-23 22:36:21.000000000 
+0100
@@ -298,7 +298,7 @@
     end
     rowval = Array(Ti, nnz)
     nzval = Array(Tv, nnz)
-    A = SparseMatrixCSC{Tv,Ti}(m, n, colptr, rowval, nzval)
+    A = SparseMatrixCSC(m, n, colptr, rowval, nzval)
     for col = max(k+1,1) : n
         c1 = S.colptr[col]
         for c2 = A.colptr[col] : A.colptr[col+1]-1
@@ -328,7 +328,7 @@
     end
     rowval = Array(Ti, nnz)
     nzval = Array(Tv, nnz)
-    A = SparseMatrixCSC{Tv,Ti}(m, n, colptr, rowval, nzval)
+    A = SparseMatrixCSC(m, n, colptr, rowval, nzval)
     for col = 1 : min(n, m+k)
         c1 = S.colptr[col+1]-1
         l2 = A.colptr[col+1]-1
@@ -345,7 +345,7 @@
 
 function sparse_diff1{Tv,Ti}(S::SparseMatrixCSC{Tv,Ti})
     m,n = size(S)
-    m > 1 || return SparseMatrixCSC{Tv,Ti}(0, n, ones(n+1), Ti[], Tv[])
+    m > 1 || return SparseMatrixCSC(0, n, ones(Ti,n+1), Ti[], Tv[])
     colptr = Array(Ti, n+1)
     numnz = 2 * nnz(S) # upper bound; will shrink later
     rowval = Array(Ti, numnz)
@@ -380,7 +380,7 @@
     end
     deleteat!(rowval, numnz+1:length(rowval))
     deleteat!(nzval, numnz+1:length(nzval))
-    return SparseMatrixCSC{Tv,Ti}(m-1, n, colptr, rowval, nzval)
+    return SparseMatrixCSC(m-1, n, colptr, rowval, nzval)
 end
 
 function sparse_diff2{Tv,Ti}(a::SparseMatrixCSC{Tv,Ti})
@@ -400,7 +400,7 @@
     ptrS = 1
     colptr[1] = 1
 
-    n == 0 && return SparseMatrixCSC{Tv,Ti}(m, n, colptr, rowval, nzval)
+    n == 0 && return SparseMatrixCSC(m, n, colptr, rowval, nzval)
 
     startA = colptr_a[1]
     stopA = colptr_a[2]
@@ -470,7 +470,7 @@
     end
     deleteat!(rowval, ptrS:length(rowval))
     deleteat!(nzval, ptrS:length(nzval))
-    return SparseMatrixCSC{Tv,Ti}(m, n-1, colptr, rowval, nzval)
+    return SparseMatrixCSC(m, n-1, colptr, rowval, nzval)
 end
 
 diff(a::SparseMatrixCSC, dim::Integer)= dim==1 ? sparse_diff1(a) : 
sparse_diff2(a)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/base/math.jl new/julia-0.3.7/base/math.jl
--- old/julia-0.3.6/base/math.jl        2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/base/math.jl        2015-03-23 22:36:21.000000000 +0100
@@ -74,7 +74,7 @@
              :(s = x*x + y*y),
              as...,
              :($ai * t + $b))
-    R = Expr(:macrocall, symbol("@horner"), esc(z), p...)
+    R = Expr(:macrocall, symbol("@horner"), esc(z), map(esc, p)...)
     :(isa($(esc(z)), Complex) ? $C : $R)
 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/base/sparse/sparsematrix.jl 
new/julia-0.3.7/base/sparse/sparsematrix.jl
--- old/julia-0.3.6/base/sparse/sparsematrix.jl 2015-02-17 23:12:25.000000000 
+0100
+++ new/julia-0.3.7/base/sparse/sparsematrix.jl 2015-03-23 22:36:21.000000000 
+0100
@@ -9,10 +9,18 @@
     colptr::Vector{Ti}      # Column i is in colptr[i]:(colptr[i+1]-1)
     rowval::Vector{Ti}      # Row values of nonzeros
     nzval::Vector{Tv}       # Nonzero values
-end
 
-SparseMatrixCSC{Tv,Ti}(m::Integer, n::Integer, colptr::Vector{Ti}, 
rowval::Vector{Ti}, nzval::Vector{Tv}) =
-    SparseMatrixCSC(int(m), int(n), colptr, rowval, nzval)
+    function SparseMatrixCSC(m::Integer, n::Integer, colptr::Vector{Ti}, 
rowval::Vector{Ti}, nzval::Vector{Tv})
+        m < 0 && throw(ArgumentError("number of rows (m) must be ≥ 0, got $m"))
+        n < 0 && throw(ArgumentError("number of columns (n) must be ≥ 0, got 
$n"))
+        new(int(m), int(n), colptr, rowval, nzval)
+    end
+end
+function SparseMatrixCSC(m::Integer, n::Integer, colptr::Vector, 
rowval::Vector, nzval::Vector)
+    Tv = eltype(nzval)
+    Ti = promote_type(eltype(colptr), eltype(rowval))
+    SparseMatrixCSC{Tv,Ti}(m, n, colptr, rowval, nzval)
+end
 
 size(S::SparseMatrixCSC) = (S.m, S.n)
 nnz(S::SparseMatrixCSC) = int(S.colptr[end]-1)
@@ -56,7 +64,7 @@
     colptr = copy(a.colptr)
     rowval = copy(a.rowval)
     nzval  = reinterpret(T, a.nzval)
-    return SparseMatrixCSC{T,Ti}(mA, nA, colptr, rowval, nzval)
+    return SparseMatrixCSC(mA, nA, colptr, rowval, nzval)
 end
 
 function sparse_compute_reshaped_colptr_and_rowval{Ti}(colptrS::Vector{Ti}, 
rowvalS::Vector{Ti}, mS::Int, nS::Int, colptrA::Vector{Ti}, 
rowvalA::Vector{Ti}, mA::Int, nA::Int)
@@ -107,7 +115,7 @@
 
     sparse_compute_reshaped_colptr_and_rowval(colptr, rowval, mS, nS, 
a.colptr, a.rowval, mA, nA)
 
-    return SparseMatrixCSC{T,Ti}(mS, nS, colptr, rowval, nzval)
+    return SparseMatrixCSC(mS, nS, colptr, rowval, nzval)
 end
 
 function reshape{Tv,Ti}(a::SparseMatrixCSC{Tv,Ti}, dims::NTuple{2,Int})
@@ -123,7 +131,7 @@
 
     sparse_compute_reshaped_colptr_and_rowval(colptr, rowval, mS, nS, 
a.colptr, a.rowval, mA, nA)
 
-    return SparseMatrixCSC{Tv,Ti}(mS, nS, colptr, rowval, nzval)
+    return SparseMatrixCSC(mS, nS, colptr, rowval, nzval)
 end
 
 ## Constructors
@@ -190,7 +198,7 @@
     rowval = similar(S.rowval)
     lS = length(S)
     sparse_compute_reshaped_colptr_and_rowval(colptr, rowval, lS, 1, S.colptr, 
S.rowval, S.m, S.n)
-    SparseMatrixCSC{Tv,Ti}(lS, 1, colptr, rowval, copy(S.nzval))
+    SparseMatrixCSC(lS, 1, colptr, rowval, copy(S.nzval))
 end
 
 sparsevec(A::AbstractMatrix) = reshape(sparse(A), (length(A),1))
@@ -356,6 +364,7 @@
 
 function sprand{T}(m::Integer, n::Integer, density::FloatingPoint,
                    rng::Function,::Type{T}=eltype(rng(1)))
+    ((m < 0) || (n < 0)) && throw(ArgumentError("invalid Array dimensions"))
     0 <= density <= 1 || throw(ArgumentError("$density not in [0,1]"))
     N = n*m
     N == 0 && return spzeros(T,m,n)
@@ -402,10 +411,11 @@
      SparseMatrixCSC(S.m, S.n, copy(S.colptr), copy(S.rowval), ones(T, 
S.colptr[end]-1))
 
 spzeros(m::Integer, n::Integer) = spzeros(Float64, m, n)
-spzeros(Tv::Type, m::Integer, n::Integer) =
-    SparseMatrixCSC(m, n, ones(Int, n+1), Array(Int, 0), Array(Tv, 0))
-spzeros(Tv::Type, Ti::Type, m::Integer, n::Integer) =
+spzeros(Tv::Type, m::Integer, n::Integer) = spzeros(Tv, Int, m, n)
+function spzeros(Tv::Type, Ti::Type, m::Integer, n::Integer)
+    ((m < 0) || (n < 0)) && throw(ArgumentError("invalid Array dimensions"))
     SparseMatrixCSC(m, n, ones(Ti, n+1), Array(Ti, 0), Array(Tv, 0))
+end
 
 speye(n::Integer) = speye(Float64, n)
 speye(T::Type, n::Integer) = speye(T, n, n)
@@ -414,6 +424,7 @@
 eye(S::SparseMatrixCSC) = speye(S)
 
 function speye(T::Type, m::Integer, n::Integer)
+    ((m < 0) || (n < 0)) && throw(ArgumentError("invalid Array dimensions"))
     x = min(m,n)
     rowval = [1:x]
     colptr = [rowval, fill(int(x+1), n+1-x)]
@@ -715,6 +726,7 @@
 
 function maximum{T}(A::SparseMatrixCSC{T})
     isempty(A) && throw(ArgumentError("argument must not be empty"))
+    (nnz(A) == 0) && (return zero(T))
     m = maximum(A.nzval)
     nnz(A)!=length(A) ? max(m,zero(T)) : m
 end
@@ -724,6 +736,7 @@
 
 function minimum{T}(A::SparseMatrixCSC{T})
     isempty(A) && throw(ArgumentError("argument must not be empty"))
+    (nnz(A) == 0) && (return zero(T))
     m = minimum(A.nzval)
     nnz(A)!=length(A) ? min(m,zero(T)) : m
 end
@@ -1975,7 +1988,7 @@
     end
     I = Array(Int, ncoeffs)
     J = Array(Int, ncoeffs)
-    V = Array(eltype(B[1]), ncoeffs)
+    V = Array(promote_type(map(eltype, B)...), ncoeffs)
     id = 0
     i = 0
     for vec in B
@@ -2099,7 +2112,7 @@
         end
     end
 
-    return SparseMatrixCSC{Tv,Ti}(n, n, colptr, rowval, nzval)
+    return SparseMatrixCSC(n, n, colptr, rowval, nzval)
 end
 
 # Sort all the indices in each column of a CSC sparse matrix
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/contrib/windows/msys_build.sh 
new/julia-0.3.7/contrib/windows/msys_build.sh
--- old/julia-0.3.6/contrib/windows/msys_build.sh       2015-02-17 
23:12:25.000000000 +0100
+++ new/julia-0.3.7/contrib/windows/msys_build.sh       2015-03-23 
22:36:21.000000000 +0100
@@ -142,6 +142,14 @@
 $SEVENZIP x -y $f >> get-deps.log
 echo 'LLVM_CONFIG = $(JULIAHOME)/usr/bin/llvm-config' >> Make.user
 
+if [ -n "$APPVEYOR" ]; then
+  for i in make.exe touch.exe msys-intl-8.dll msys-iconv-2.dll; do
+    f="/c/MinGW/msys/1.0/bin/$i"
+    if [ -e $f ]; then
+      cp $f /bin/$i
+    fi
+  done
+fi
 if [ -z "`which make 2>/dev/null`" ]; then
   if [ -n "`uname | grep CYGWIN`" ]; then
     echo "Install the Cygwin package for 'make' and try again."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/contrib/windows/winrpm.sh 
new/julia-0.3.7/contrib/windows/winrpm.sh
--- old/julia-0.3.6/contrib/windows/winrpm.sh   1970-01-01 01:00:00.000000000 
+0100
+++ new/julia-0.3.7/contrib/windows/winrpm.sh   2015-03-23 22:36:21.000000000 
+0100
@@ -0,0 +1,94 @@
+#!/bin/sh
+# build-time mini version of WinRPM, usage:
+# ./winrpm.sh 
http://download.opensuse.org/repositories/windows:/mingw:/win64/openSUSE_13.1/ 
mingw64-zlib1
+# depends on curl, xmllint, gunzip, sort -V, sha256sum, and p7zip
+
+set -e
+url=$1
+toinstall=$2
+# run in dist-extras
+mkdir -p $(dirname "$0")/../../dist-extras
+cd $(dirname "$0")/../../dist-extras
+
+# there is a curl --retry flag but it wasn't working here for some reason
+retry_curl() {
+  for i in $(seq 10); do
+    curl -fLsS $1 && return
+    #sleep 2
+  done
+  echo "failed to download $1" >&2
+  exit 1
+}
+
+xp="xmllint --xpath"
+# the local-name() complication here is due to xml namespaces
+loc="local-name()="
+eval $(retry_curl $url/repodata/repomd.xml | $xp "/*[$loc'repomd'] \
+  /*[$loc'data'][@type='primary']/*[$loc'location']/@href" -)
+
+case $href in
+  *.gz)
+    primary=$(retry_curl $url/$href | gunzip);;
+  *)
+    primary=$(retry_curl $url/$href);;
+esac
+
+# outputs <package> xml string for newest version
+# don't include arch=src packages, those will list build-time dependencies
+rpm_select() {
+  candidates="<c>$(echo $primary | $xp "//*[$loc'package'] \
+    [./*[$loc'name' and .='$1']][./*[$loc'arch' and .='noarch']]" - \
+    2>/dev/null | sed -e 's|<rpm:|<|g' -e 's|</rpm:|</|g')</c>"
+  # remove rpm namespacing so output can be parsed by xmllint later
+  if [ "$candidates" = "<c></c>" ]; then
+    echo "error: no package candidates found for $1" >&2
+    exit 1
+  fi
+  epochs=""
+  for i in $(echo $candidates | $xp "/c/package/version/@epoch" -); do
+    eval $i
+    epochs="$epochs $epoch"
+  done
+  maxepoch=$(echo $epochs | sed 's/ /\n/g' | sort -V -u | tail -n 1)
+  vers=""
+  for i in $(echo $candidates | $xp "/c/package/version \
+      [@epoch='$maxepoch']/@ver" -); do
+    eval $i
+    vers="$vers $ver"
+  done
+  maxver=$(echo $vers | sed 's/ /\n/g' | sort -V -u | tail -n 1)
+  rels=""
+  for i in $(echo $candidates | $xp "/c/package/version \
+      [@epoch='$maxepoch'][@ver='$maxver']/@rel" -); do
+    eval $i
+    rels="$rels $rel"
+  done
+  maxrel=$(echo $rels | sed 's/ /\n/g' | sort -V -u | tail -n 1)
+  repeats=$(echo $rels | sed 's/ /\n/g' | sort -V | uniq -d | tail -n 1)
+  if [ "$repeats" = "$maxrel" ]; then
+    echo "warning: multiple candidates found for $1 with same version:" >&2
+    echo "epoch $maxepoch, ver $maxver, rel $maxrel, picking at random" >&2
+  fi
+  echo $candidates | $xp "/c/package[version[@epoch='$maxepoch'] \
+    [@ver='$maxver'][@rel='$maxrel']][1]" -
+}
+
+mkdir -p noarch
+for i in $toinstall; do
+  pkgi=$(rpm_select $i)
+  # fail if no available candidates for requested packages
+  if [ -z "$pkgi" ]; then
+    exit 1
+  fi
+  checksum=$(echo $pkgi | $xp "/package/checksum/text()" -)
+  eval $(echo $pkgi | $xp "/package/location/@href" -)
+  echo "downloading $href"
+  ../deps/jldownload $href $url/$href
+  echo "$checksum *$href" | sha256sum -c
+  7z x -y $href
+  cpiofile=$(basename $href | sed 's/.rpm$/.cpio/')
+  rm $href
+  7z e -y $cpiofile
+  rm $cpiofile
+done
+rmdir --ignore-fail-on-non-empty noarch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/deps/Makefile 
new/julia-0.3.7/deps/Makefile
--- old/julia-0.3.6/deps/Makefile       2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/deps/Makefile       2015-03-23 22:36:21.000000000 +0100
@@ -856,7 +856,7 @@
 endif
 
 openblas-$(OPENBLAS_VER).tar.gz:
-       $(JLDOWNLOAD) $@ 
https://github.com/xianyi/OpenBLAS/tarball/$(OPENBLAS_VER)
+       $(JLDOWNLOAD) $@ 
https://github.com/xianyi/OpenBLAS/archive/$(OPENBLAS_VER).tar.gz
 openblas-$(OPENBLAS_VER)/config.status: openblas-$(OPENBLAS_VER).tar.gz
 ifneq ($(OPENBLAS_VER),develop)
        $(JLCHECKSUM) $<
@@ -1651,7 +1651,7 @@
 install-patchelf: $(PATCHELF_TARGET)
 
 patchelf-$(PATCHELF_VER).tar.gz:
-       $(JLDOWNLOAD) $@ 
https://ia601003.us.archive.org/29/items/julialang/mirror/patchelf-$(PATCHELF_VER).tar.gz
+       $(JLDOWNLOAD) $@ 
http://nixos.org/releases/patchelf/patchelf-$(PATCHELF_VER)/patchelf-$(PATCHELF_VER).tar.gz
 patchelf-$(PATCHELF_VER)/configure: patchelf-$(PATCHELF_VER).tar.gz
        $(JLCHECKSUM) $<
        $(TAR) zxf $<
@@ -1734,12 +1734,15 @@
        touch -c $@
 $(VIRTUALENV_TARGET): $(VIRTUALENV_SOURCE)
        "$(shell ./find_python2)" $< $@
+ifeq ($(BUILD_OS), WINNT)
+       [ -e $@/Scripts ] && ! [ -e $@/bin ] && cmd //C mklink //J $@\\bin 
$@\\Scripts
+endif
        touch -c $@
 
 clean-virtualenv:
        -$(MAKE) -C virtualenv-$(VIRTUALENV_VER) clean
-       -rm -f $(VIRTUALENV_TARGET)
-distclean-virtualenv:
+       -rm -rf $(VIRTUALENV_TARGET)
+distclean-virtualenv: clean-virtualenv
        -rm -rf virtualenv-$(VIRTUALENV_VER).tar.gz virtualenv-$(VIRTUALENV_VER)
 
 get-virtualenv: virtualenv-$(VIRTUALENV_VER).tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/julia-0.3.6/deps/checksums/openblas-v0.2.13.tar.gz/md5 
new/julia-0.3.7/deps/checksums/openblas-v0.2.13.tar.gz/md5
--- old/julia-0.3.6/deps/checksums/openblas-v0.2.13.tar.gz/md5  2015-02-17 
23:12:25.000000000 +0100
+++ new/julia-0.3.7/deps/checksums/openblas-v0.2.13.tar.gz/md5  2015-03-23 
22:36:21.000000000 +0100
@@ -1 +1 @@
-74adf4c0d0d82bff4774be5bf2134183
+bba7b37b5a5b6674fda91dcb2faab145
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/julia-0.3.6/deps/checksums/openblas-v0.2.13.tar.gz/sha512 
new/julia-0.3.7/deps/checksums/openblas-v0.2.13.tar.gz/sha512
--- old/julia-0.3.6/deps/checksums/openblas-v0.2.13.tar.gz/sha512       
2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/deps/checksums/openblas-v0.2.13.tar.gz/sha512       
2015-03-23 22:36:21.000000000 +0100
@@ -1 +1 @@
-e3c8d3f7c7f9593a863cba2679f3cf5872138b0aa0f2a61cac15901364489c9a6bff0c166813d154bc0d91118302585ac1340eaaeb7dc11c8aad92757bbf86ba
+1b43c78212296fdbbf5347e24bc0ec7a36f8e672ce9ace07b2fc9598a0111fe47b95d16c0e0fda32ec254a201f2c012798843e07f7280bf1156ab9ed3d3e4263
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/deps/checksums/patchelf-0.8.tar.gz/md5 
new/julia-0.3.7/deps/checksums/patchelf-0.8.tar.gz/md5
--- old/julia-0.3.6/deps/checksums/patchelf-0.8.tar.gz/md5      2015-02-17 
23:12:25.000000000 +0100
+++ new/julia-0.3.7/deps/checksums/patchelf-0.8.tar.gz/md5      2015-03-23 
22:36:21.000000000 +0100
@@ -1 +1 @@
-f8810e6598fcb04a43765ef67b71f9cb
+407b229e6a681ffb0e2cdd5915cb2d01
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/julia-0.3.6/deps/checksums/patchelf-0.8.tar.gz/sha512 
new/julia-0.3.7/deps/checksums/patchelf-0.8.tar.gz/sha512
--- old/julia-0.3.6/deps/checksums/patchelf-0.8.tar.gz/sha512   2015-02-17 
23:12:25.000000000 +0100
+++ new/julia-0.3.7/deps/checksums/patchelf-0.8.tar.gz/sha512   2015-03-23 
22:36:21.000000000 +0100
@@ -1 +1 @@
-32ffbec9c2037bd2efaac868d412a68f5397ce5f8ff336d966add861bc038b257b2307c44a3a3dfd12376b5e4c6abe86831d6f6e698642a800684d26600633dc
+f8b8420d7b5fcdd9aa17f318cd7314024831e990d422b8e566c48ab009978a4c8c2cff4623b906aa50cf8805328b7c9ecb6ea1d65ed8a1e1d44db282249d92c9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/deps/jldownload 
new/julia-0.3.7/deps/jldownload
--- old/julia-0.3.6/deps/jldownload     2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/deps/jldownload     2015-03-23 22:36:21.000000000 +0100
@@ -3,7 +3,7 @@
 # usage: jldownload [<output-filename>] <url>
 #
 
-MIRROR_HOST=http://d304tytmzqn1fl.cloudfront.net
+CACHE_HOST=https://cache.e.ip.saba.us
 
 WGET=$(which wget 2>/dev/null)
 CURL=$(which curl 2>/dev/null)
@@ -26,8 +26,7 @@
     exit 1
 fi
 
-MIRROR_BASENAME=`basename $1`
-MIRROR_URL="$MIRROR_HOST/$MIRROR_BASENAME"
+CACHE_URL="$CACHE_HOST/$URL"
 
 if [ -x "$CURL" ] && $CURL -V >/dev/null; then
     GETURL="$CURL $CURL_OPTS"
@@ -41,12 +40,8 @@
     exit 1
 fi
 
-if [ -z "$JLDOWNLOAD_PREFER_MIRROR" ]; then
-    $GETURL $URL || $GETURL $MIRROR_URL
-else
-    # Still try downloading from the original URL if the mirror fails.
-    # User may want to get around a single failure, only to run into a dep
-    # that we haven't mirrored yet, so better to be safe than sorry and try 
-    # the original URL in that case
-    $GETURL $MIRROR_URL || $GETURL $URL
-fi
+# Try to get from the cache if it is possible.  Note that the cache will
+# forward to the original URL if it has not cached this download yet, or
+# if the URL is not cacheable.  We fallback to directly querying the
+# uncached URL to protect against cache service downtime
+$GETURL $CACHE_URL || $GETURL $URL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/doc/helpdb.jl 
new/julia-0.3.7/doc/helpdb.jl
--- old/julia-0.3.6/doc/helpdb.jl       2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/doc/helpdb.jl       2015-03-23 22:36:21.000000000 +0100
@@ -1317,8 +1317,9 @@
 
    Create a deep copy of \"x\": everything is copied recursively,
    resulting in a fully independent object. For example, deep-copying
-   an array produces a new array whose elements are deep-copies of the
-   original elements.
+   an array produces a new array whose elements are deep copies of the
+   original elements. Calling *deepcopy* on an object should generally
+   have the same effect as serializing and then deserializing it.
 
    As a special case, functions can only be actually deep-copied if
    they are anonymous, otherwise they are just copied. The difference
@@ -1680,9 +1681,8 @@
 
 ("Base","evalfile","evalfile(path::String)
 
-   Evaluate all expressions in the given file, and return the value of
-   the last one. No other processing (path searching, fetching from
-   node 1, etc.) is performed.
+   Load the file using \"include\", evaluate all expressions, and
+   return the value of the last one.
 
 "),
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/doc/manual/interacting-with-julia.rst 
new/julia-0.3.7/doc/manual/interacting-with-julia.rst
--- old/julia-0.3.6/doc/manual/interacting-with-julia.rst       2015-02-17 
23:12:25.000000000 +0100
+++ new/julia-0.3.7/doc/manual/interacting-with-julia.rst       2015-03-23 
22:36:21.000000000 +0100
@@ -73,6 +73,8 @@
 
 Help mode can be exited by pressing backspace at the beginning of the line.
 
+.. _man-shell-mode:
+
 Shell mode
 ~~~~~~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/doc/manual/packages.rst 
new/julia-0.3.7/doc/manual/packages.rst
--- old/julia-0.3.6/doc/manual/packages.rst     2015-02-17 23:12:25.000000000 
+0100
+++ new/julia-0.3.7/doc/manual/packages.rst     2015-03-23 22:36:21.000000000 
+0100
@@ -286,6 +286,8 @@
 You are also able to make changes to packages, commit them using git, and 
easily contribute fixes and enhancements upstream.
 Similarly, the system is designed so that if you want to create a new package, 
the simplest way to do so is within the infrastructure provided by the package 
manager.
 
+.. _man-pkg-dev-setup:
+
 Initial Setup
 -------------
 
@@ -305,8 +307,234 @@
 You should also `upload <https://github.com/settings/ssh>`_ your public SSH 
key to GitHub and set up an `SSH agent <http://linux.die.net/man/1/ssh-agent>`_ 
on your development machine so that you can push changes with minimal hassle.
 In the future, we will make this system extensible and support other common 
git hosting options like `BitBucket <https://bitbucket.org>`_ and allow 
developers to choose their favorite.
 
+Making changes to an existing package
+-------------------------------------
+
+Documentation changes
+~~~~~~~~~~~~~~~~~~~~~
+
+If you want to improve the online documentation of a package, the
+easiest approach (at least for small changes) is to use GitHub's
+online editing functionality. First, navigate to the repository's
+GitHub "home page," find the file (e.g., ``README.md``) within the
+repository's folder structure, and click on it. You'll see the
+contents displayed, along with a small "pencil" icon in the upper
+right hand corner. Clicking that icon opens the file in edit mode.
+Make your changes, write a brief summary describing the changes you
+want to make (this is your *commit message*), and then hit "Propose
+file change."  Your changes will be submitted for consideration by the
+package owner(s) and collaborators.
+
+Code changes
+~~~~~~~~~~~~
+
+If you want to fix a bug or add new functionality, you want to be able
+to test your changes before you submit them for consideration. You
+also need to have an easy way to update your proposal in response to
+the package owner's feedback. Consequently, in this case the strategy
+is to work locally on your own machine; once you are satisfied with
+your changes, you submit them for consideration.  This process is
+called a *pull request* because you are asking to "pull" your changes
+into the project's main repository. Because the online repository
+can't see the code on your private machine, you first *push* your
+changes to a publicly-visible location, your own online *fork* of
+the package (hosted on your own personal GitHub account).
+
+Let's assume you already have the ``Foo`` package installed.  In the
+description below, anything starting with ``Pkg.`` is meant to be
+typed at the Julia prompt; anything starting with ``git`` is meant to
+be typed in :ref:`julia's shell mode <man-shell-mode>` (or using the
+shell that comes with your operating system).  Within Julia, you can
+combine these two modes::
+
+    julia> cd(Pkg.dir("Foo"))          # go to Foo's folder
+
+    shell> git command arguments...    # command will apply to Foo
+
+Now suppose you're ready to make some changes to ``Foo``.  While there
+are several possible approaches, here is one that is widely used:
+
+- From the Julia prompt, type :func:`Pkg.checkout("Foo") <Pkg.checkout>`. This
+  ensures you're running the latest code (the ``master`` branch), rather than
+  just whatever "official release" version you have installed. (If you're
+  planning to fix a bug, at this point it's a good idea to check again
+  whether the bug has already been fixed by someone else. If it has,
+  you can request that a new official release be tagged so that the
+  fix gets distributed to the rest of the community.) If you receive
+  an error ``Foo is dirty, bailing``, see :ref:`Dirty packages
+  <man-pkg-dirty>` below.
+
+- Create a branch for your changes: navigate to the package folder
+  (the one that Julia reports from :func:`Pkg.dir("Foo") <Pkg.dir>`) and (in
+  shell mode) create a new branch using ``git checkout -b <newbranch>``,
+  where ``<newbranch>`` might be some descriptive name (e.g.,
+  ``fixbar``). By creating a branch, you ensure that you can easily go
+  back and forth between your new work and the current ``master``
+  branch (see
+  `<http://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell>`_).
+
+  If you forget to do this step until after you've already made some
+  changes, don't worry: see :ref:`more detail about branching
+  <man-post-hoc-branching>` below.
+
+- Make your changes. Whether it's fixing a bug or adding new
+  functionality, in most cases your change should include updates to
+  both the ``src/`` and ``test/`` folders.  If you're fixing a bug,
+  add your minimal example demonstrating the bug (on the current code)
+  to the test suite; by contributing a test for the bug, you ensure
+  that the bug won't accidentally reappear at some later time due to
+  other changes.  If you're adding new functionality, creating tests
+  demonstrates to the package owner that you've made sure your code
+  works as intended.
+
+- Run the package's tests and make sure they pass. There are several ways to
+  run the tests:
+
+  + From Julia, run :func:`Pkg.test("Foo") <Pkg.test>`: this will run your
+    tests in a separate (new) julia process.
+  + From Julia, ``include("runtests.jl")`` from the package's ``test/`` folder
+    (it's possible the file has a different name, look for one that runs all
+    the tests): this allows you to run the tests repeatedly in the same session
+    without reloading all the package code; for packages that take a while to
+    load, this can be much faster. With this approach, you do have to do some
+    extra work to make :ref:`changes in the package code <man-workflow-tips>`.
+  + From the shell, run ``julia runtests.jl`` from within the package's
+    ``test/`` folder.
+
+
+- Commit your changes: see 
`<http://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository>`_.
+
+- Submit your changes: From the Julia prompt, type
+  :func:`Pkg.submit("Foo") <Pkg.submit>`. This will push your changes to your
+  GitHub fork, creating it if it doesn't already exist. (If you encounter an
+  error, :ref:`make sure you've set up your SSH keys <man-pkg-dev-setup>`.)
+  Julia will then give you a hyperlink; open that link, edit the message, and
+  then click "submit." At that point, the package owner will be notified of
+  your changes and may initiate discussion.
+
+- The package owner may suggest additional improvements. To respond to those
+  suggestions, you can easily update the pull request (this only works for
+  changes that have not already been merged; for merged pull requests, make new
+  changes by starting a new branch):
+
+  + If you've changed branches in the meantime, make sure you go back
+    to the same branch with ``git checkout fixbar`` (from shell mode)
+    or :func:`Pkg.checkout("Foo", "fixbar") <Pkg.checkout>` (from the Julia
+    prompt).
+
+  + As above, make your changes, run the tests, and commit your changes.
+
+  + From the shell, type ``git push``.  This will add your new
+    commit(s) to the same pull request; you should see them appear
+    automatically on the page holding the discussion of your pull
+    request.
+
+  One potential type of change the owner may request is that you
+  squash your commits.  See :ref:`Squashing <man-pkg-squash>` below.
+
+.. _man-pkg-dirty:
+
+Dirty packages
+~~~~~~~~~~~~~~
+
+If you can't change branches because the package manager complains
+that your package is dirty, it means you have some changes that have
+not been committed. From the shell, use ``git diff`` to see
+what these changes are; you can either discard them (``git checkout
+changedfile.jl``) or commit them before switching branches.  If you
+can't easily resolve the problems manually, as a last resort you can
+delete the entire ``"Foo"`` folder and reinstall a fresh copy with
+:func:`Pkg.add("Foo") <Pkg.add>`. Naturally, this deletes any changes you've
+made.
+
+.. _man-post-hoc-branching:
+
+Making a branch *post hoc*
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Especially for newcomers to git, one often forgets to create a new
+branch until after some changes have already been made.  If you
+haven't yet staged or committed your changes, you can create a new
+branch with ``git checkout -b <newbranch>`` just as usual---git will
+kindly show you that some files have been modified and create the new
+branch for you.  *Your changes have not yet been committed to this new
+branch*, so the normal work rules still apply.
+
+However, if you've already made a commit to ``master`` but wish to go
+back to the official ``master`` (called ``origin/master``), use the
+following procedure:
+
+- Create a new branch. This branch will hold your changes.
+- Make sure everything is committed to this branch.
+- ``git checkout master``. If this fails, *do not* proceed further
+  until you have resolved the problems, or you may lose your changes.
+- *Reset* ``master`` (your current branch) back to an earlier state
+  with ``git reset --hard origin/master`` (see
+  `<http://git-scm.com/blog/2011/07/11/reset.html>`_).
+
+This requires a bit more familiarity with git, so it's much better to
+get in the habit of creating a branch at the outset.
+
+.. _man-pkg-squash:
+
+Squashing and rebasing
+~~~~~~~~~~~~~~~~~~~~~~
+
+.. highlight:: none
+
+Depending on the tastes of the package owner (s)he may ask you to
+"squash" your commits. This is especially likely if your change is
+quite simple but your commit history looks like this::
+
+   WIP: add new 1-line whizbang function (currently breaks package)
+   Finish whizbang function
+   Fix typo in variable name
+   Oops, don't forget to supply default argument
+   Split into two 1-line functions
+   Rats, forgot to export the second function
+   ...
+
+.. highlight:: julia
+
+This gets into the territory of more advanced git usage, and you're
+encouraged to do some reading
+(`<http://git-scm.com/book/en/v2/Git-Branching-Rebasing>`_).  However,
+a brief summary of the procedure is as follows:
+
+- To protect yourself from error, start from your ``fixbar`` branch
+  and create a new branch with ``git checkout -b fixbar_backup``.  Since
+  you started from ``fixbar``, this will be a copy. Now go back to
+  the one you intend to modify with ``git checkout fixbar``.
+- From the shell, type ``git rebase -i origin/master``.
+- To combine commits, change ``pick`` to ``squash`` (for additional
+  options, consult other sources). Save the file and close the editor
+  window.
+- Edit the combined commit message.
+
+If the rebase goes badly, you can go back to the beginning to try
+again like this::
+
+   git checkout fixbar
+   git reset --hard fixbar_backup
+
+Now let's assume you've rebased successfully. Since your ``fixbar``
+repository has now diverged from the one in your GitHub fork, you're
+going to have to do a *force push*:
+
+- To make it easy to refer to your GitHub fork, create a "handle" for
+  it with ``git remote add myfork
+  https://github.com/myaccount/Foo.jl.git``, where the URL comes from
+  the "clone URL" on your GitHub fork's page.
+- Force-push to your fork with ``git push myfork +fixbar``. The `+`
+  indicates that this should replace the ``fixbar`` branch found at
+  ``myfork``.
+
+
+Creating a new Package
+----------------------
+
 Guidelines for Naming a Package
--------------------------------
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Package names should be sensible to most Julia users, *even to those who are
 not domain experts*.
@@ -352,8 +580,8 @@
 
   * ``MATLAB.jl`` provides an interface to call the MATLAB engine from within 
Julia.
 
-Generating a New Package
-------------------------
+Generating the package
+~~~~~~~~~~~~~~~~~~~~~~
 
 Suppose you want to create a new Julia package called ``FooBar``.
 To get started, do :func:`Pkg.generate(pkg,license) <Pkg.generate>` where 
``pkg`` is the new package name and ``license`` is the name of a license that 
the package generator knows about::
@@ -401,7 +629,7 @@
 Of course, all the default testing does is verify that ``using FooBar`` in 
Julia works.
 
 Making Your Package Available
------------------------------
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Once you've made some commits and you're happy with how ``FooBar`` is working, 
you may want to get some other people to try it out.
 First you'll need to create the remote repository and push your code to it;
@@ -419,7 +647,7 @@
 .. [3] Installing and using GitHub's `"hub" tool 
<https://github.com/github/hub>`_ is highly recommended. It allows you to do 
things like run ``hub create`` in the package repo and have it automatically 
created via GitHub's API.
 
 Publishing Your Package
------------------------
+~~~~~~~~~~~~~~~~~~~~~~~
 
 Once you've decided that ``FooBar`` is ready to be registered as an official 
package, you can add it to your local copy of ``METADATA`` using 
:func:`Pkg.register`::
 
@@ -485,7 +713,7 @@
 .. _man-manual-publish:
 
 Publishing METADATA manually
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+============================
 
 If :func:`Pkg.publish` fails you can follow these instructions to
 manually publish your package.
@@ -517,7 +745,7 @@
 Tagging Package Versions
 ------------------------
 
-Once you are ready to make an official version your package, you can tag and 
register it with the :func:`Pkg.tag` command::
+Once you are ready to make an official version your package---or release a new 
version of an established package---you can tag and register it with the 
:func:`Pkg.tag` command::
 
     julia> Pkg.tag("FooBar")
     INFO: Tagging FooBar v0.0.1
@@ -664,4 +892,3 @@
     VERSION >= v"0.2.1" #get at least version 0.2.1
 
 See the section on :ref:`version number literals 
<man-version-number-literals>` for a more complete description.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/doc/stdlib/base.rst 
new/julia-0.3.7/doc/stdlib/base.rst
--- old/julia-0.3.6/doc/stdlib/base.rst 2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/doc/stdlib/base.rst 2015-03-23 22:36:21.000000000 +0100
@@ -217,7 +217,7 @@
 
 .. function:: deepcopy(x)
 
-   Create a deep copy of ``x``: everything is copied recursively, resulting in 
a fully independent object. For example, deep-copying an array produces a new 
array whose elements are deep-copies of the original elements.
+   Create a deep copy of ``x``: everything is copied recursively, resulting in 
a fully independent object. For example, deep-copying an array produces a new 
array whose elements are deep copies of the original elements. Calling 
`deepcopy` on an object should generally have the same effect as serializing 
and then deserializing it.
 
    As a special case, functions can only be actually deep-copied if they are 
anonymous, otherwise they are just copied. The difference is only relevant in 
the case of closures, i.e. functions which may contain hidden internal 
references.
 
@@ -472,7 +472,7 @@
 
 .. function:: evalfile(path::String)
 
-   Evaluate all expressions in the given file, and return the value of the 
last one. No other processing (path searching, fetching from node 1, etc.) is 
performed.
+   Load the file using ``include``, evaluate all expressions, and return the 
value of the last one.
 
 .. function:: esc(e::ANY)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/src/julia-parser.scm 
new/julia-0.3.7/src/julia-parser.scm
--- old/julia-0.3.6/src/julia-parser.scm        2015-02-17 23:12:25.000000000 
+0100
+++ new/julia-0.3.7/src/julia-parser.scm        2015-03-23 22:36:21.000000000 
+0100
@@ -1396,7 +1396,7 @@
             (if (eqv? (require-token s) closer)
                 (loop lst nxt)
                 (let ((params (parse-arglist s closer)))
-                  `(vcat ,@params ,@lst ,nxt))))
+                  `(vcat ,@params ,@(reverse lst) ,nxt))))
            ((#\] #\})
             (error (string "unexpected \"" t "\"")))
            (else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/test/arrayops.jl 
new/julia-0.3.7/test/arrayops.jl
--- old/julia-0.3.6/test/arrayops.jl    2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/test/arrayops.jl    2015-03-23 22:36:21.000000000 +0100
@@ -785,6 +785,7 @@
     @test deleteat!(a, idx) == [acopy[1:(first(idx)-1)], 
acopy[(last(idx)+1):end]]
 end
 a = [1:10]
+@test deleteat!(a, 11:10) == [1:10;]
 @test deleteat!(a, [1,3,5,7:10...]) == [2,4,6]
 @test_throws BoundsError deleteat!(a, 13)
 @test_throws BoundsError deleteat!(a, [1,13])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/test/math.jl new/julia-0.3.7/test/math.jl
--- old/julia-0.3.6/test/math.jl        2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/test/math.jl        2015-03-23 22:36:21.000000000 +0100
@@ -306,6 +306,10 @@
 @test 1e-13 > errc(zeta(2 + 1im, -1.1), 
-1525.8095173321060982383023516086563741006869909580583246557 + 
1719.4753293650912305811325486980742946107143330321249869576im)
 
 @test @evalpoly(2,3,4,5,6) == 3+2*(4+2*(5+2*6)) == @evalpoly(2+0im,3,4,5,6)
+a0 = 1
+a1 = 2
+c = 3
+@test @evalpoly(c, a0, a1) === 7
 
 @test 1e-14 > err(eta(1+1e-9), 
0.693147180719814213126976796937244130533478392539154928250926)
 @test 1e-14 > err(eta(1+5e-3), 
0.693945708117842473436705502427198307157819636785324430166786)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/julia-0.3.6/test/sparse.jl 
new/julia-0.3.7/test/sparse.jl
--- old/julia-0.3.6/test/sparse.jl      2015-02-17 23:12:25.000000000 +0100
+++ new/julia-0.3.7/test/sparse.jl      2015-03-23 22:36:21.000000000 +0100
@@ -550,3 +550,17 @@
         @assert res[1] == res[2] == res[3]
     end
 end
+
+# issue #10407
+@test maximum(spzeros(5, 5)) == 0.0
+@test minimum(spzeros(5, 5)) == 0.0
+
+# issue #10411
+for (m,n) in ((2,-2),(-2,2),(-2,-2))
+    @test_throws ArgumentError spzeros(m,n)
+    @test_throws ArgumentError speye(m,n)
+    @test_throws ArgumentError sprand(m,n,0.2)
+end
+
+# promotion in spdiagm
+@test spdiagm(([1,2],[3.5],[4+5im]), (0,1,-1), 2,2) == [1 3.5; 4+5im 2]

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to