Commit Graph

253 Commits

Author SHA1 Message Date
Agaricus
cc5391a5cf Add caching for remotely downloaded resources
Mappings or jars downloaded from http URLs given to --srg-in or
--in-jar, --first-jar, --second-jar, will be cached locally in
a temporary directory, and reused on subsequent invocations if
present. The cache can be invalidated with --force-redownload.
2013-03-01 20:53:03 -08:00
Agaricus
5b979a4da3 Save downloaded files to non-random temporary filenames
Fixes repeated downloads filling up your disk.
2013-03-01 20:30:42 -08:00
Agaricus
a6e18b0665 Move loadMappings() dir/file logic to JarMapping
Instead of in the command-line interface.. this allows
other code providing an interface to SpecialSource to
easily pass user-supplied options for loading mappings.
2013-03-01 19:10:06 -08:00
Agaricus
91803d03ea Add support for remote --first-jar/--second-jar
Example:
java -jar target/SpecialSource-1.3-SNAPSHOT-shaded.jar --first-jar http://assets.minecraft.net/1_4_7/minecraft_server.jar --second-jar http://repo.bukkit.org/content/groups/public/org/bukkit/minecraft-server/1.4.7/minecraft-server-1.4.7.jar
2013-02-28 20:18:11 -08:00
Agaricus
308d1b4413 Add --numeric-srg option for using srg names (vs csv) on MCP dirs
Normally, --srg-in on a directory will load joined.srg or
client.srg and server.srg, translated through fields.csv,
methods.csv, and packages.csv, if available. --numeric will
ignore fields.csv and methods.csv, remapping the jar to
the numeric "srg" names instead of descriptive "csv" names.
(packages.csv will still be used if it exists; if you want
flat packaging then specify joined.srg to --srg-in directly.)
2013-02-27 21:56:07 -08:00
Agaricus
e36a60a078 Add support for remote --srg-in mappings
Mappings can now be downloaded from remote URLs. Both
individual .srgs and directories of .srg/.csv are supported.
Examples:

java -jar target/SpecialSource-1.3-SNAPSHOT-shaded.jar --in-jar http://assets.minecraft.net/1_4_7/minecraft_server.jar --out-jar /tmp/net.jar --srg-in https://raw.github.com/MinecraftForge/FML/master/conf/joined.srg
java -jar target/SpecialSource-1.3-SNAPSHOT-shaded.jar --in-jar http://assets.minecraft.net/1_4_7/minecraft_server.jar --out-jar /tmp/net2.jar --srg-in https://raw.github.com/MinecraftForge/FML/master/conf/
2013-02-27 21:37:02 -08:00
Agaricus
e99d3c7ef4 Update date to 2012-2013 2013-02-27 21:18:22 -08:00
Agaricus
1000ba60cf Add support for remote --in-jar URLs
You can now provide an HTTP URL to --in-jar and
it will be downloaded to a temporary file before
remapping. Example:

java -jar target/SpecialSource-1.3-SNAPSHOT-shaded.jar --in-jar http://assets.minecraft.net/1_4_7/minecraft_server.jar --out-jar /tmp/net.jar --srg-in ../MinecraftForge/mcp/conf/
2013-02-27 21:11:47 -08:00
Agaricus
262ec1b82e Remove support for reading packaged.srg
packaged.srg is created by FML/MCP from joined.srg
and packages.csv. Now that we support reading packages.csv,
remove support for packaged.srg; one fewer codepath.
2013-02-27 18:34:26 -08:00
Agaricus
888aecfe22 Add support for packages.csv mappings
If packages.csv is found in a mapping directory, the
classes in .srg will be mapped through it. This is an
alternative to reading packages.srg, which isn't present
in the FML distribution (only joined.srg+packages.csv).
2013-02-27 13:35:32 -08:00
Agaricus
ea80a4eb91 Fix 'ZipException: invalid entry compressed size' mapping non-ASCII text files
When remapping Minecraft + Forge, was failing with:

Exception in thread "main" java.util.zip.ZipException: invalid entry compressed size (expected 13048 but got 13084 bytes)
  at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:248)
    at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:343)
    at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:238)
    at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:360)
    at net.md_5.specialsource.JarRemapper.remapJar(JarRemapper.java:141)
    at net.md_5.specialsource.SpecialSource.main(SpecialSource.java:220)

Full details: https://gist.github.com/agaricusb/5036166

To fix this, we always create a JarEntry. Explanation from:
http://javahowto.blogspot.com/2011/07/how-to-programmatically-copy-jar-files.html

It usually occurs when text file entries in the source jar file contain some non-ASCII characters such as ^I ^Z ^D ^C. Some common files are META-INF/COPYRIGHT.html, META-INF/LICENSE.txt, etc, probably because these files were created in a non-ASCII editor but saved as text files. Open them in vi or vim to see these offending characters. To avoid this type of ZipException, always create a new JarEntry with the same name, and pass it to putNextEntry() method. Do not pass the existing jar entry from the source jar file to putNextEntry() method.
2013-02-25 21:42:44 -08:00
Agaricus
cadc0ef588 Remove deprecated 2013-02-22 18:24:46 -08:00
Agaricus
16a1c725dc Add reverse and output shade relocation flags
Removed the ^/@-style input specifications, in favor of
command-line options (which apply to all mappings loaded):

--in-shade-relocation: applies to srg-in input names
--out-shade-relocation: applies to srg-in output names
--reverse: reverses srg-in input/output names

Output shading relocation is useful if remapping through
--srg-in obf2cb.srg, and you want versioned names to match CB.
2013-02-21 21:32:05 -08:00
Agaricus
49e2b341c0 Disable reading .srg 'PK:' mappings for now
Example from packaged.srg:

PK: . net/minecraft/src
PK: com com
PK: net net
PK: net/minecraft net/minecraft
PK: net/minecraft/client net/minecraft/client
PK: net/minecraft/server net/minecraft/server

SpecialSource package remaps currently are class prefix matches,
taking precedence over class remaps. So net->net would match all
net.* classes when using reversed MCP (for reobfuscation), causing
no classes to remap. However the current behavior is useful for MCPC+,
remapping entire package hierarchies. Probably both behaviors should be
supported at some point, but until they are, disabling .srg PK:.
2013-02-21 20:31:17 -08:00
Agaricus
44de5cb247 Add support for loading mappings in reverse
--srg-in ^filename will load the mappings as if they were reversed.

This is a decoration on the filename instead of a separate command-
line option flag so it can apply to the particular mapping file,
when loading multiple mappings simultaneously.
2013-02-21 20:25:04 -08:00
Agaricus
87a5874745 Read fields/methods.csv for MCP directory mapping loading
You can now specify an MCP config directory with --srg-in and
the .srg will be loaded along with the fields.csv and methods.csv
mappings, providing descriptive "csv" names instead of the
numeric "srg" names. Example usage:

java -jar target/SpecialSource-1.3-SNAPSHOT-shaded.jar --in-jar ../jars/minecraft_server-147.jar --srg-in ../MinecraftForge/mcp/conf/ --out-jar /tmp/minecraft-server-pkgmcp.jar

For compiling mods against the minecraft-server-pkgmcp.jar
as a library, an alternative to recompiling all of Minecraft
by using MCP (much faster, like compiling Bukkit plugins).

Note: if the fields.csv and methods.csv are not present, the
numeric "srg" names will be loaded instead.
2013-02-20 22:02:24 -08:00
Agaricus
7ab477500c Fix incomplete shade relocation of .srg files
.csrg OK
2013-02-20 20:39:54 -08:00
Agaricus
f643febd34 Refactor ShadeRelocationSimulator into JarMappingInputTransformer
JarMappings loaded from disk are now transformed through a
JarMappingInputTransformer interface, which can arbitrarily
transform classes on loading. Currently only implemented
by ShadeRelocationSimulator.
2013-02-20 20:26:50 -08:00
Agaricus
04ca0de2f4 Add support for reading mappings from directories
MCP conf directories: packaged.srg, joined.srg or server.srg+client.srg
2013-02-20 20:10:53 -08:00
Agaricus
db83423bf5 Add opencsv dependency 2013-02-20 19:42:40 -08:00
Agaricus
abafa99ab3 Add CLI support for multiple --srg-in mappings
You could always load multiple mappings by calling loadMapping()
multiple times (as in MCPC+), but now it is also supported for
command-line usage. --srg-in mapping1.srg --srg-in mapping2.srg...
equivalent to cat mapping1.srg mapping2.srg.
2013-02-20 19:13:08 -08:00
Agaricus
2cb7a3c96d Add CLI alternate syntax for shade relocation
--srg-in ../jars/1.4.7/cb2pkgmcp.srg --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1,org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle
--srg-in ../jars/1.4.7/cb2pkgmcp.srg@net.minecraft.server=net.minecraft.server.v1_4_R1,org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle
2013-02-20 19:03:39 -08:00
Agaricus
5b02d05ed2 Cache negative hits in InheritanceMap 2013-02-18 19:07:08 -08:00
Agaricus
3d40eca480 Cache inheritance mapping in JarMapping
JarMapping now maintains an InheritanceMap, and will populate
from IInheritanceProvider, if given. This allows inheritance to
be cached either locally or globally (across different JarMappings).
2013-02-18 18:45:48 -08:00
Agaricus
a8b5ebcbc6 Revert "Add a 'fallback' to InheritanceMap"
This reverts commit d2c2ad65db.
2013-02-18 18:15:49 -08:00
Agaricus
d2c2ad65db Add a 'fallback' to InheritanceMap
setFallback() allows an IInheritanceProvider to be specified which
will be consulted when inheritance for a requested class is unavailable.
If it returns a value, the inheritance will be cached in the InheritanceMap.
2013-02-18 18:14:31 -08:00
Agaricus
a430689c64 Add support for remapping subpackages in package map
Change data structure to a linked hash map, preserving insertion
order. This allows subpackages to be inserted into the package
map for remapping, before their parent package. For example,
A/B/C -> X and A/B -> Y. With the unordered HashMap data structure,
this was not possible (reliably). With LinkedHashMap, now it is.
2013-02-17 12:28:19 -08:00
Agaricus
fc8bae3e04 Add accessors for InheritanceMap and remove public access 2013-02-16 23:54:09 -08:00
Agaricus
1c18d27d8a Combine reflection remapping into RemapperPreprocessor
Allows simultaneously extracting inheritance information,
and remapping reflection -- all in a single pass.
2013-02-06 21:36:50 -08:00
Agaricus
5dc73a76ec Add RemapperPreprocessor
Used to "preprocess" a class file, using the ASM tree API,
before remapping with JarRemapper. Right now it only
extracts the inheritance and adds to an InheritanceMap.

Code moved from MCPC+ PluginClassLoader.
2013-02-06 20:41:05 -08:00
Agaricus
0bc766f8e7 Add debug option to ReflectionRemapper 2013-02-05 21:54:35 -08:00
Agaricus
3be71eee94 Use tryClimb in ReflectionRemapper 2013-02-05 21:54:35 -08:00
Agaricus
20dfec9ce3 Refactor tryClimb() into JarMapping
JarMapping now contains the IInheritanceProvider and tryClimb()
instead of JarRemapper, to allow other remappers access to the
same inheritance traversal code.
2013-02-05 21:54:35 -08:00
Agaricus
6e34774a46 Initial implementation of field reflection remapper
Remaps the string constant in class.getDeclaredField("fieldname")
2013-02-05 21:54:35 -08:00
Agaricus
874e759a9d Add remapClassFile() accepting byte[] instead of InputStream 2013-02-05 21:54:35 -08:00
Agaricus
c562f814b5 Expose jarMapping and inheritanceProvider in JarMapping 2013-02-05 21:54:35 -08:00
md_5
1b1857aeaa Don't need that validation either 2013-02-04 20:45:20 +11:00
md_5
45ccb010c0 SRG files can still be valid even without that check - they may not be mapping complete jars. That belongs in debug log at best. 2013-02-04 20:22:13 +11:00
Agaricus
147a04ddfc Fix package renaming in csrg mappings
The trailing slash was being remapped, causing incorrect package names.
Expected format is for example:

org/bukkit/craftbukkit/v1_4_6/ org/bukkit/craftbukkit/v1_4_R1

to replace org/bukkit/craftbukkit/v1_4_6 -> org/bukkit/craftbukkit/v1_4_R1
The trailing slash is only to disambiguate from class remaps in csrg.
2013-02-03 14:55:02 -08:00
Agaricus
0ef12539d9 Add package mapping count to log output 2013-02-03 14:47:05 -08:00
md_5
0da951d711 Java 6 support 2013-02-03 19:32:50 +11:00
md_5
898cb2320b Skip empty lines + comments in SRG 2013-02-03 19:28:47 +11:00
Agaricus
e602ed5dc8 Improve error messages for csrg/srg mapping file parsing 2013-02-02 22:38:46 -08:00
Agaricus
79bc85e8b0 Add standard srg format support to --srg-in
Previously, only the (much easier to parse) 'csrg' format was supported
2013-02-02 20:52:57 -08:00
Agaricus
ccf4bd5abd Add empty inheritance provider singleton
Previously, an empty list would signify no inheritance information.
2013-02-01 23:41:25 -08:00
Agaricus
fbd2b64a61 Simplify inheritance lookup
Remap through only one inheritance provider, instead of a list of them.

The multiple inheritance provider lookup functionality (check each one,
in order, until one provider responds for the class name) is still
available, but refactored into a new InheritanceProviders class.

Simplifies the common case of only having one inheritance provider, and
also reduces the redundant looping code previously in JarMapper/InheritanceMap.
2013-01-31 19:49:45 -08:00
Agaricus
8ee18916f1 Add remapped inheritance map file reading
The inheritance map, as generated with --write-inheritance/-H, can now
be read using --read-inheritance/-H. It will be remapped through the
currently loaded inverse mapping before supplying the inheritance provider.

Example usage:

java -cp target/SpecialSource-1.3-SNAPSHOT-shaded.jar net.md_5.specialsource.SpecialSource --shade-relocation net.minecraft.server=net.minecraft.server.v1_4_R1 --shade-relocation org.bouncycastle=net.minecraft.v1_4_R1.org.bouncycastle --srg-in ../jars/1.4.7/cb2obf.csrg --in-jar ../IncompatiblePlugin/target/bukkit-sample-plugin-0.5.jar  --out-jar /tmp/sp/out.jar  -h /tmp/h

where the inheritance map was previously generated using:

java -cp target/SpecialSource-1.3-SNAPSHOT-shaded.jar:mcpc-plus-1.4.7-R0.2-SNAPSHOT.jar net.md_5.specialsource.SpecialSource --srg-in ~/minecraft/1.4.x/jars/1.4.7/cb2obf.csrg --live --write-inheritance /tmp/h
2013-01-29 21:32:50 -08:00
Agaricus
4725e6d913 Add inheritance map file reading 2013-01-29 20:31:47 -08:00
Agaricus
29900947d1 Add missing copyrights 2013-01-29 19:33:39 -08:00
Agaricus
0ecf1100de Reduce unnecessary output in generated inheritance map
Only includes mapped classes in the parents, and only includes entries
for classes which have relevant parents (extends/implements classes).
Shrinks inheritance map on MCPC+ build 73 by 279 lines.
2013-01-29 19:25:31 -08:00